Die Verwendung des Multiprocessing-Pools aus der Sellerie-Task löst eine Ausnahme aus

8

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%     
Simon Gray 12.01.2015, 14:23
quelle

2 Antworten

6

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.

%Vor%

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.

    
Davy 20.08.2015 18:37
quelle
0

Eine schnelle Lösung besteht darin, den Thread-basierten "Dummy" zu verwenden multiprocessing Implementierung. Ändern

%Vor%

bis

%Vor%

Da diese Parallelität jedoch Thread-basiert ist, gelten die üblichen Vorbehalte (GIL).

    
Razzi Abuissa 09.04.2016 00:35
quelle