Les Interruptions de clavier avec python multitraitement Piscine

Comment puis-je gérer KeyboardInterrupt événements avec python multitraitement Piscines? 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 obtient augmenté lorsque j'appuie sur ^C, mais le processus se bloque tout simplement à ce moment et je dois le tuer à l'extérieur.

Je veux être capable de presse ^C à tout moment et tous les processus de fermer correctement.

J'ai résolu mon problème en utilisant psutil, vous pouvez voir la solution ici: stackoverflow.com/questions/32160054/...

OriginalL'auteur Fragsworth | 2009-09-10