2013-04-17 4 views
7

Как я могу завершить текущий процесс, начал использовать concurrent.futures? Насколько я понимаю, метод cancel() должен удалить процесс из очереди, если он не запущен. Но как насчет убийства запущенного процесса? Например, если у меня длительный процесс, и я хочу остановить его, когда я нажимаю кнопку «Отмена» в графическом интерфейсе.Есть ли способ остановить запущенный процесс в concurrent.futures?

ответ

0

В этом случае, вероятно, было бы лучше использовать multiprocessing.Process для долговременной задачи.

Создайте multiprocessing.Eventдо, начиная новый процесс. Регулярно проверяйте статус этого Event и завершайте его, когда Event.is_set() возвращает True.

В коде вашего GUI есть обратный вызов, связанный с вызовом кнопки set() на Event.

0

Возможно, вы захотите посмотреть мой ответ на соответствующий вопрос StackOverflow here.

Короче говоря, похоже, что нет простого способа отменить текущий процесс внутри concurrent.futures.ProcessPoolExecutor. Но вы можете выполнить его в режиме hacky, убив дочерние процессы вручную.

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