2010-09-10 19 views
11

Używam modułu przetwarzania wieloprocesowego do równoległego przetwarzania w moim programie. Kiedy testuję to, często chcę zabić program wcześniej, gdy zauważę błąd, ponieważ ukończenie trwa trochę dłużej. W środowisku Linux uruchamiam mój program z terminala i używam klawiszy Ctrl + C, aby go zabić. W przypadku przetwarzania wieloprocesorowego powoduje to, że wszystkie procesy są zabijane, ale nigdy nie odzyskuje się zachęty bash i trzeba zamknąć terminal i otworzyć nowy (i wrócić do mojego katalogu roboczego), co jest dość denerwujące. Czy istnieje sposób na obejście tego?Programowanie przy użyciu wieloprocesowości

+0

Czy możesz podać próbkę tego, co próbujesz osiągnąć? – hyperboreean

+0

Zobacz ten wątek: http://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool – wchung

Odpowiedz

21

Hit Ctrl-Z, aby zawiesić proces Pythona, a następnie zrobić kill %1 aby go zabić. Możesz też po prostu nacisnąć Ctrl- \ (ukośnik odwrotny), ale to może spowodować, że proces opuści plik core.

+2

+1: Czasami w programach wielowątkowych/wieloprocesowych musisz "zabić -9% 1", że źle chłopak. – jathanism

2

Ale czekaj ... czy nie istnieje sposób obsługi zdarzenia KeyboardException, aby zabić procesy w puli?

Próbowałem:

except KeyboardInterrupt as e: # Ctrl-C 
    print("Killing all the children in the pool.") 
    pool.close() 
    pool.terminate() 
    return 1 
    # raise e 

Ale to nie wydają się działać.

+3

Chciałbym dowiedzieć się, jak to zrobić. –

Powiązane problemy