Совместное использование очереди результатов между несколькими процессами


документация multiprocessing модуль показывает, как передать очередь в процесс, запущенный с помощью multiprocessing.Process. Но как я могу разделить очередь с асинхронными рабочими процессами, запущенными с apply_async? Мне не нужно динамическое присоединение или что-то еще, просто способ для работников (неоднократно) сообщать о своих результатах обратно на базу.

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    q = multiprocessing.Queue()
    workers = pool.apply_async(worker, (33, q))

Это не с: RuntimeError: Queue objects should only be shared between processes through inheritance. Я понимаю, что это значит, и я понимаю совет наследовать, а не требовать маринования / распалубки (и все специальные ограничения). Но как do Я передаю очередь таким образом, что работает? Я не могу найти пример, и я пробовал несколько альтернатив, которые потерпели неудачу по-разному. Помогите пожалуйста?

1 57

1 ответ:

попробуйте использовать многопроцессорная обработка.Менеджер для управления вашей очереди, а также сделать его доступным для различных работников.

import multiprocessing
def worker(name, que):
    que.put("%d is done" % name)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    m = multiprocessing.Manager()
    q = m.Queue()
    workers = pool.apply_async(worker, (33, q))