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']

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

2 ответа

Решение

Очередь фактически наполняется. Вам нужно вызывать 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']

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

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

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

Другие вопросы по тегам