В документации по модулю 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
. Я понимаю, что это значит, и я понимаю совет наследовать, а не требовать травления/распаковывания (и все специальные ограничения Windows ). Но как пройти очередь так, чтобы это работало? Я не могу найти пример, и я пробовал несколько альтернатив, которые по-разному терпели неудачу. Помоги пожалуйста?