如何终止正在运行的流程,开始使用concurrent.futures?据我所知,cancel()
方法用于从队列中删除进程(如果它没有运行)。但是如何杀死正在运行的进程呢?例如,如果我有一个长时间运行的进程,并且我想在GUI中按下“取消”按钮时停止它。
答案 0 :(得分:0)
在这种情况下,将multiprocessing.Process
用于长时间运行的任务可能会更好。
在开始新流程之前创建multiprocessing.Event
。让子进程定期检查此Event
的状态,并在Event.is_set()
返回True
时退出。
在您的GUI代码中,将回调与set()
上的按钮调用Event
相关联。
答案 1 :(得分:0)
您可能希望查看我对相关StackOverflow问题here的回答。
简而言之,似乎没有一种简单的方法来取消concurrent.futures.ProcessPoolExecutor
内的正在运行的进程。但是你可以通过手动杀死子进程以 hacky 的方式完成它。