FÜR DIESES LESEN: Ich habe mich dafür entschieden, stattdessen RQ zu verwenden, das nicht fehlschlägt, wenn Code ausgeführt wird, der das Multiprocessing-Modul verwendet. Ich schlage vor, dass Sie das verwenden.
Ich versuche, einen Multiprocessing-Pool aus einer Sellerie-Task mit Python 3 zu verwenden und ihn als Broker (auf einem Mac) zu rediszieren. Allerdings scheint es mir nicht möglich zu sein, ein Multiprocessing-Pool-Objekt innerhalb der Sellerie-Aufgabe zu erstellen. Stattdessen bekomme ich eine merkwürdige Ausnahme, mit der ich wirklich nicht weiß, was ich damit anfangen soll.
Kann mir jemand sagen, wie ich das erreichen soll?
Die Aufgabe:
%Vor%was ich zu Sellerie hinzufüge mit:
%Vor%und dann über das folgende Python-Skript laufen:
%Vor%gibt die folgende Sellerie-Ausgabe zurück:
%Vor% Dies ist ein bekanntes Problem mit Sellerie . Es geht auf ein Thema zurück, das in der Billardabhängigkeit eingeführt wurde. Ein Problem besteht darin, das Attribut _config
für den aktuellen Prozess manuell festzulegen. Danke an den Benutzer @martinth für den Workaround.
Der worker_process_init
-Hook führt den Code nach der Worker-Prozessinitialisierung aus. Wir überprüfen einfach, ob _config
existiert, und legen sie fest, falls dies nicht der Fall ist.
Eine schnelle Lösung besteht darin, den Thread-basierten "Dummy" zu verwenden multiprocessing
Implementierung. Ändern
bis
%Vor%Da diese Parallelität jedoch Thread-basiert ist, gelten die üblichen Vorbehalte (GIL).
Tags und Links python celery redis multiprocessing