2010-09-10 3 views
11

Я использую модуль многопроцессорности для параллельной обработки в моей программе. Когда я тестирую его, я часто хочу, чтобы программа была убита раньше, когда я заметил ошибку, так как требуется некоторое время, чтобы выполнить ее до завершения. В моей Linux-среде я запускаю свою программу с терминала и использую Ctrl + C, чтобы убить ее. При многопроцессорности это приводит к тому, что все процессы будут убиты, но я никогда не получаю приглашение bash назад и должен закрыть терминал и открыть новый (и вернуться к моему рабочему каталогу), что очень раздражает. Есть ли способ обойти это?Убивание программы с использованием многопроцессорной обработки

+0

Можете ли вы предоставить образец того, чего вы пытаетесь достичь? – hyperboreean

+0

Посмотрите эту тему: http://stackoverflow.com/questions/1408356/keyboard-interrupts-with-pythons-multiprocessing-pool – wchung

ответ

21

Нажмите Ctrl-Z, чтобы приостановить процесс Python, а затем сделать kill %1, чтобы убить его. Вы также можете просто нажать Ctrl- \ (обратная косая черта), но это может привести к тому, что процесс оставит основной файл.

+2

+1: Иногда с помощью многопоточных/многопроцессорных программ вы должны «убить -9% 1», что плохо мальчик. – jathanism

0

Чтобы начать процесс, вы можете использовать экран, а затем убить сеанс экрана, когда вам нужно. Он не выведет весь терминал bash. Для хорошего экрана учебник см:

http://www.kuro5hin.org/story/2004/3/9/16838/14935

2

Но подождите ... нет способа обработки события KeyboardException, чтобы убить процессы в пуле?

Я пробовал:

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

Но это не похоже на работу.

+3

Мне очень хотелось бы узнать, как это сделать. –

Смежные вопросы