Comment puis-je gérer les événements KeyboardInterrupt avec les Pools multiprocesseurs de python ? Voici un exemple simple :
from multiprocessing import Pool
from time import sleep
from sys import exit
def slowly_square(i):
sleep(1)
return i*i
def go():
pool = Pool(8)
try:
results = pool.map(slowly_square, range(40))
except KeyboardInterrupt:
# **** THIS PART NEVER EXECUTES. ****
pool.terminate()
print "You cancelled the program!"
sys.exit(1)
print "\nFinally, here are the results: ", results
if __name__ == "__main__":
go()
Lors de l'exécution du code ci-dessus, le KeyboardInterrupt
se lève lorsque j'appuie sur ^C
mais le processus se bloque tout simplement à ce moment-là et je dois le tuer en externe.
Je veux pouvoir appuyer sur ^C
à tout moment et faire en sorte que tous les processus se terminent gracieusement.
0 votes
J'ai résolu mon problème en utilisant psutil, vous pouvez voir la solution ici : stackoverflow.com/questions/32160054/