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 ?