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?
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: Ссылка
Tags und Links python multiprocessing pool