Partage d’une file de résultats entre plusieurs processus

| | | | | | | | | | | | | |

La documentation du module multiprocessing montre comment passer 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 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 : les objets de la file d'attente ne doivent être partagés entre les processus que par héritage. Je comprends ce que cela signifie, et je comprends le conseil d'hériter plutôt que de nécessitent un pickling/unpickling (et toutes les restrictions spéciales de Windows). Mais comment faire 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 ?