Queue vs JoinableQueue в Python

В Python при использовании многопроцессорного модуля есть 2 вида очередей:

  • Очередь
  • JoinableQueue.

В чем разница между ними?

Очередь

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() для каждой задачи, удаленной из очереди, или же семафор, используемый для подсчета количества незавершенных задач, может в конечном итоге переполнить, создавая исключение.

  • Сбрасывание многопроцессорности.
  • Понимание os.fork и Queue.Queue
  • Python mulitprocessing queue не удерживает всех занятых
  • Многопроцессорность Python.Код взаимоблокировки на put и get
  • Создание динамических очередей с помощью Сельдерея
  • Ошибки памяти в Python Queues при вызове внутри потока
  • Использование aa-менеджера для обновления очереди в многопроцессе Python
  • Выполнение задач параллельно в python
  •  
    Interesting Posts for Van-Lav

    Сельдерей против ProcessPoolExecutor / ThreadPoolExecutor

    Вычисление итоговой статистики столбцов в области данных

    Закрученный реактор остановлен, но программа не заканчивается?

    Как повторить один раз при исключении в python

    Когда создается ссылка, а когда выделен новый блок памяти и затем копируется?

    Новые строки в колбе внутри {% block content%}

    Может ли быть действительно намного быстрее, чем python?

    Поза из фундаментальной матрицы и наоборот

    Время ожидания синтаксиса Python asyncio

    Эквивалент преобразования в R / ddply в Python / pandas?

    Поддержка Python ElementTree для синтаксического анализа неизвестных объектов XML?

    гармоническое среднее в питоне

    Показать тренировку и точность проверки в TensorFlow с использованием того же графика

    Самый простой способ выполнения модульной инверсии матрицы с помощью Python?

    Получение URL-адреса из гиперссылок Excel-листа в Python с помощью xlrd

    Python - лучший язык программирования в мире.