Вопросы производительности Python Queue - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть сокет, прослушивающий поток json, но, если возможно, какой-нибудь потоковый производитель.Я помещаю элементы в очередь Queue.queue для потребления:


self.MAX_QUEUE_SIZE =   0
self.POOL_SIZE      =   10
self.Queue_         =   Queue.Queue(maxsize=self.MAX_QUEUE_SIZE)


def monitor_resp(self,q):
    while True:
        resp = q.get()
        self.parse_resp(resp)
        q.task_done()


def start_consumer_threads(self):
    for i in range(self.POOL_SIZE):
         t = threading.Thread(name = 'Parser Thread-' + str(i),
                                target=self.monitor_resp, args=(self.Queue_, ))
         t.daemon = True
         t.start()


def open_thread(self,req):
        self.send(req)
        |
        |
        (socket recv code)
        |
        ------------> self.Queue_.put(resp)

Мой вопрос заключается в том, какие соображения производительности следует учитывать при установке переменных MAX_QUEUE_SIZE и POOL_SIZE?

* 1007Т.е. какой вес каждый работник постоянно спрашивает q.get () для системы?

Если очень мало, чтобы большое количество работников было лучше, чтобы не допустить смешения данных из канала сокетов?

Когда я использую put_nowait (), я редко получаю исключение Queue.Full - это правда?возможно, в случае проб и ошибок - использование блока и регистрация этих исключений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...