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