La documentation du multiprocessing
module montre comment transmettre une file d'attente à un processus démarré avec multiprocessing.Process
. Mais comment puis-je partager une file d'attente avec des processus de travail asynchrones démarrés avec apply_async
? Je n'ai pas besoin de jointure dynamique ou de quoi que ce soit d'autre, juste un moyen pour les travailleurs de rapporter (à plusieurs reprises) leurs résultats à la base.
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))
Cela échoue avec:
RuntimeError: Queue objects should only be shared between processes through inheritance
. Je comprends ce que cela signifie, et je comprends les conseils d'hériter plutôt que d'exiger le décapage / décapage (et toutes les restrictions Windows spéciales). Mais comment puis - je passer la file d'attente d'une manière qui fonctionne? Je ne trouve pas d'exemple et j'ai essayé plusieurs alternatives qui ont échoué de différentes manières. Aidez-moi, s'il vous plaît?