【问题标题】:Killing processes in ProcessPoolExecutor [duplicate]在 ProcessPoolExecutor 中杀死进程 [重复]
【发布时间】:2020-09-22 00:03:04
【问题描述】:

我正在使用 Python 的 ProcessPoolExecutor 并行运行多个进程并在其中任何一个完成时处理它们。然后我查看他们的输出,只要其中至少一个给出令人满意的答案,我就想退出程序。

但是,这是不可能的,因为在调用 pool.shutdown(wait=False) 时,我必须等待 pool 中的所有活动任务完成,然后才能退出我的脚本。

有没有办法杀死所有剩余的活跃孩子并退出? 另外,是否有更好的方法可以在至少有一个孩子返回我们等待的答案时立即停止?

【问题讨论】:

    标签: python multiprocessing executor process-pool


    【解决方案1】:

    你在做什么不是很清楚,但执行者认为我完全是错误的工具。

    multiprocessing.Pool 似乎更合适,并允许完全按照您的要求进行操作:您可以迭代 imap_unordered(或 apply_async 并轮询结果),一旦您拥有了您正在寻找的内容terminate() 池然后join() 它。

    【讨论】:

    • 谢谢! terminate() 也会杀死所有提交的进程吗?
    • 其实就是terminate的整个点。另一种选择是close(),它会阻止提交新任务并指示工人在完成任务时退出,但terminate() 会阻止工人,即使他们正在工作中。
    • from concurrent.futures import ProcessPoolExecutor, as_completed exc = ProcessPoolExecutor(max_workers=4) processes = [exc.submit(job, arg) for job, args in jobs_tuple] for job in as_completed(processes): if job.result() == 'meets_a_condition': break exc.shutdown(wait=False) `
    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2021-01-19
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2020-01-25
    相关资源
    最近更新 更多