Queue vs JoinableQueue в Python
В Python при использовании многопроцессорного модуля есть 2 вида очередей:
- Очередь
- JoinableQueue.
В чем разница между ними?
- Проверка статуса очереди задач в Google App Engine
- Ошибка очереди многопроцессорности Python
- Максимальный предел максимальной длины очереди - 32767
- Могу ли я использовать многопроцессорную очередь в функции, называемой пулом Pool.imap?
- Многопроцессорность в python заблокирована
Очередь
from multiprocessing import Queue q = Queue() q.put(item) # Put an item on the queue item = q.get() # Get an item from the queue
JoinableQueue
from multiprocessing import JoinableQueue q = JoinableQueue() q.task_done() # Signal task completion q.join() # Wait for completion
One Solution collect form web for “Queue vs JoinableQueue в Python”
JoinableQueue
имеет методы join()
и task_done()
, которых нет в Queue
.
class multiprocessing.Queue ([maxsize])
Возвращает очередь процессов, реализованную с использованием канала и нескольких блокировок / семафоров. Когда процесс сначала помещает элемент в очередь, запускается поток фидера, который переносит объекты из буфера в трубу.
Обычные исключения Queue.Empty и Queue.Full из модуля очереди стандартной библиотеки повышаются до таймаутов сигналов.
Queue реализует все методы Queue.Queue, за исключением task_done () и join ().
класс многопроцессорности. JoinableQueue ([maxsize])
JoinableQueue, подкласс Queue, представляет собой очередь, которая дополнительно имеет методы task_done () и join ().
task_done ()
Укажите, что ранее заданная задача завершена. Используется потоками потребителей в очереди. Для каждого get (), используемого для извлечения задачи, последующий вызов task_done () сообщает очереди, что обработка задачи завершена.
Если соединение в настоящее время блокируется, оно возобновляется, когда все элементы были обработаны (это означает, что для каждого элемента, который был помещен () в очередь, был получен вызов task_done ()).
Повышает значение ValueError, если вызывается больше раз, чем были помещены в очередь.
присоединиться()
Блокируйте, пока все элементы в очереди не будут получены и обработаны.
Количество незавершенных задач увеличивается, когда элемент добавляется в очередь. Счетчик прекращается всякий раз, когда потребительский поток вызывает task_done (), чтобы указать, что элемент был восстановлен, и все работа над ним завершена. Когда количество незавершенных задач падает до нуля, join () разблокируется.
Если вы используете JoinableQueue
вы должны вызвать JoinableQueue.task_done()
для каждой задачи, удаленной из очереди, или же семафор, используемый для подсчета количества незавершенных задач, может в конечном итоге переполнить, создавая исключение.
- Как реализовать ленивое setdefault?
- Можно ли заставить панды не преобразовывать тип данных при использовании DataFrame.replace