Как запустить очистку при завершении скрипта Python - PullRequest
2 голосов
/ 22 июня 2010

У меня есть скрипт на Python, который выполняет некоторые работы.Я использую multiprocessing.Pool, чтобы несколько работников делали для меня какие-то команды.

Моя проблема - когда я пытаюсь завершить сценарий.Когда я нажимаю Ctrl-C , мне бы хотелось, чтобы каждый работник немедленно очищал свой эксперимент (который представляет собой некоторый пользовательский код или даже команду подпроцесса, а не только освобождение блокировок или памяти) и останавливался.

Я знаю, что могу поймать Ctrl-C с помощью обработчика сигнала.Как сделать так, чтобы все работающие в данный момент рабочие из multiprocessing.Pool завершали свою работу, все еще выполняя свою команду очистки?

Pool.terminate() не будет полезным, поскольку процессы будут завершены без очистки.

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Как насчет попытки стандартного модуля atexit ?

Он позволяет зарегистрировать функцию, которая будет выполняться после завершения.

0 голосов
/ 22 июня 2010

Вы работаете с Unix? Если да, то почему бы не поймать SIGTERM в подпроцессах? Фактически, документация Process.terminate() гласит:

Terminate the process. On Unix this is done using the SIGTERM signal

(Я не проверял это.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...