Многопроцессорная очередь Python

Я заполняю очередь набором заданий, которые я хочу запускать параллельно, и используя для этого модуль многопроцессорности python. Ниже приведен фрагмент кода:

import multiprocessing
from multiprocessing import Queue
queue = Queue()
jobs = [['a', 'b'], ['c', 'd']]
for job in jobs:
    queue.put(job)

Когда я делаю queue.get(), я получаю следующее:

['a', 'b']

Почему очередь не заполняется всеми заданиями?

Ответы

Ответ 1

Очередь фактически заполняется. Вы должны вызвать queue.get() для каждого момента, когда вы помещаете объект в очередь. Поэтому вам просто нужно еще раз вызвать queue.get().

>>> import multiprocessing
>>> from multiprocessing import Queue
>>> queue = Queue()
>>> jobs = [['a', 'b'], ['c', 'd']]
>>> for job in jobs:
    queue.put(job)


>>> queue.get()
['a', 'b']
>>> queue.get()
['c', 'd']

Ответ 2

В очереди заполняется все ваши задания. queue.get() будет

Удалите и верните элемент из очереди.

Элемент сингулярный. Если вы хотите слить очередь, то просто поставьте .get() в цикле, но обязательно поймайте исключение Empty.