Подтвердить что ты не робот

Убивание программы с использованием многопроцессорности

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

4b9b3361

Ответ 1

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

Ответ 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

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

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