有没有办法在concurrent.futures中停止正在运行的进程?

时间:2013-04-17 02:04:32

标签: python python-3.x multiprocessing

如何终止正在运行的流程,开始使用concurrent.futures?据我所知,cancel()方法用于从队列中删除进程(如果它没有运行)。但是如何杀死正在运行的进程呢?例如,如果我有一个长时间运行的进程,并且我想在GUI中按下“取消”按钮时停止它。

2 个答案:

答案 0 :(得分:0)

在这种情况下,将multiprocessing.Process用于长时间运行的任务可能会更好。

在开始新流程之前创建multiprocessing.Event 。让子进程定期检查此Event的状态,并在Event.is_set()返回True时退出。

在您的GUI代码中,将回调与set()上的按钮调用Event相关联。

答案 1 :(得分:0)

您可能希望查看我对相关StackOverflow问题here的回答。

简而言之,似乎没有一种简单的方法来取消concurrent.futures.ProcessPoolExecutor内的正在运行的进程。但是你可以通过手动杀死子进程以 hacky 的方式完成它。