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