Python-Multiprocessing-Pool beenden

8

Ich arbeite an einem Renderfarm, und ich brauche meine Clients in der Lage, mehrere Instanzen eines Renderers zu starten, ohne zu blockieren, damit der Client neue Befehle erhalten kann. Ich habe das funktioniert richtig, aber ich habe Probleme beim Beenden der erstellten Prozesse.

Auf der globalen Ebene definiere ich meinen Pool (damit ich von jeder Funktion darauf zugreifen kann):

%Vor%

Ich rufe dann meinen Renderer mit apply_async:

%Vor%

Diese Funktion beendet, startet die Prozesse im Hintergrund und wartet auf neue Befehle. Ich habe einen einfachen Befehl ausgeführt, der den Client beendet und die Rendern stoppt:

%Vor%

Es scheint keinen Fehler zu geben (es würde den Fehler ausgeben), der Python wird beendet, aber die Hintergrundprozesse laufen noch. Kann jemand eine bessere Möglichkeit zur Kontrolle dieser gestarteten Programme empfehlen?

    
tk421storm 06.05.2013, 14:34
quelle

2 Antworten

5

Wenn dieses Problem weiterhin auftritt, können Sie versuchen, eine Pool mit dämonische Prozesse (vorausgesetzt, Sie starten den Pool / die Prozesse aus einem nicht-dämonischen Prozess). Ich bezweifle, dass dies die beste Lösung ist, da es so aussieht, als ob Ihre Pool Prozesse spannend sein sollten, aber das ist alles was ich mir vorstellen kann. Ich weiß nicht, was dein Callback macht, also bin ich mir nicht sicher, wo ich es in meinem Beispiel unten einfügen soll.

Ich schlage auch vor, dass Sie versuchen, Ihre Pool in __main__ zu erstellen, da meine Erfahrung (und die Dokumente) seltsam ist, wenn Prozesse global erzeugt werden. Dies gilt insbesondere für Windows: Ссылка

%Vor%     
mdscruggs 08.05.2013 19:23
quelle
5

Ich habe eine Lösung gefunden: Stoppt den Pool in einem separaten Thread, so:

%Vor%

Funktioniert gut und ich habe es immer getestet.

    
eri 06.08.2013 21:12
quelle

Tags und Links