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:
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.
Wir können gevent.Timeout verwenden, um die Ausführungszeit des Arbeiters festzulegen. gevent-Tutorial
%Vor%Tags und Links python multiprocessing python-multiprocessing