Si vous écrivez normalement le pool multitraitement de python et ctrl + c pendant l'exécution, le processus ne se terminera pas et restera bloqué.
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()
(Si vous Ctrl + C lors de l'exécution de la source ci-dessus)
(Abréviation)
KeyboardInterrupt
(Il s'arrêtera dans cet état)
Même si je spécifie l'ID de processus et que je le tue, python ressuscite comme un zombie. Je veux le finir proprement avec Ctrl + C en quelque sorte.
Quelqu'un avait exactement le même problème avec StackOverflow. https://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool
Il semble que l'entrée de KeyboardInterrupt n'est pas transmise au processus appelé dans le pool, et la fonction d'attente continue d'attendre indéfiniment.
Ce n'est pas grave si vous définissez un délai.
p.map(worker, range(6))
À
p.map_async(worker, range(6)).get(9999999)
Remplacer par.
Recommended Posts