Wenn Sie den Multiprozessor-Pool von Python normal und Strg + C während der Ausführung schreiben, wird der Prozess nicht beendet und bleibt hängen.
pool.py
import time
from multiprocessing import Pool
def worker(arg):
print("process {}".format(arg))
time.sleep(2)
if __name__ == '__main__':
p = Pool(2)
p.map(worker, range(6))
p.close()
(Wenn Sie beim Ausführen der obigen Quelle Strg + C drücken)
(Abkürzung)
KeyboardInterrupt
(Es wird in diesem Zustand aufhören)
Selbst wenn ich die Prozess-ID spezifiziere und töte, wird Python wie ein Zombie wiederbelebt. Ich möchte es irgendwie sauber mit Strg + C beenden.
Jemand hatte genau das gleiche Problem mit StackOverflow. https://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool
Es scheint, dass die Eingabe von KeyboardInterrupt nicht an den im Pool aufgerufenen Prozess übertragen wird und die Wartefunktion für immer wartet.
Es ist in Ordnung, wenn Sie eine Zeitüberschreitung festlegen.
p.map(worker, range(6))
Zu
p.map_async(worker, range(6)).get(9999999)
Ersetzen mit.
Recommended Posts