Wie kann ich eine Aufgabe in einem Multiprocessing.Pool nach einer Zeitüberschreitung abbrechen?

8

Ich versuche, das Multiprocessing-Paket von Python auf diese Weise zu verwenden:

%Vor%

Aus Prozessen des Pools möchte ich vermeiden, dass diejenigen, die mehr als 60 s benötigen, auf ihr Ergebnis warten. Ist das möglich?

    
farhawa 07.04.2015, 14:26
quelle

2 Antworten

10

Hier können Sie dies tun, ohne die Funktion worker ändern zu müssen. Die Idee besteht darin, den Worker in eine andere Funktion zu verpacken, die worker in einem Hintergrundthread aufruft, und dann auf ein Ergebnis für timeout Sekunden zu warten. Wenn das Zeitlimit abläuft, wird eine Ausnahme ausgelöst, die den Thread, in dem worker ausgeführt wird, abrupt beendet:

%Vor%

Jede Funktion, die Zeitüberschreitungen auslöst, erhöht multiprocessing.TimeoutError . Beachten Sie, dass dies bedeutet, dass Ihr Rückruf nicht ausgeführt wird, wenn eine Zeitüberschreitung auftritt. Wenn dies nicht akzeptabel ist, ändern Sie einfach den except -Block von abortable_worker , um etwas zurückzugeben, anstatt raise aufzurufen.

    
dano 07.04.2015, 15:14
quelle
0

Wir können gevent.Timeout verwenden, um die Ausführungszeit des Arbeiters festzulegen. gevent-Tutorial

%Vor%     
thinkdeeper 08.04.2016 12:48
quelle