【问题标题】:wait process until all subprocess finish? [duplicate]等待进程直到所有子进程完成? [复制]
【发布时间】:2013-02-13 00:02:29
【问题描述】:

我有一个创建两个或多个子进程的主进程,我希望主进程等到所有子进程完成操作并退出?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...

【问题讨论】:

标签: python subprocess ipc


【解决方案1】:
subprocess.call

自动等待,也可以使用:

p1.wait()

【讨论】:

    【解决方案2】:

    Popen 对象有一个专门为此定义的 .wait() 方法:等待给定子进程的完成(此外,重新调整其退出状态)。

    如果你使用这种方法,你可以防止进程僵尸停留太久。

    (或者,您可以使用subprocess.call()subprocess.check_call() 进行调用和等待。如果您不需要进程的IO,那可能就足够了。但可能这不是一个选项,因为如果这两个子进程似乎应该并行运行,但它们不会与 (check_)call().)

    如果你有几个子流程要等待,你可以这样做

    exit_codes = [p.wait() for p in p1, p2]
    

    所有子进程完成后立即返回。然后,您将获得一个返回代码列表,您可以对其进行评估。

    【讨论】:

    • 问题是如何等待所有子进程,而不仅仅是一个。
    • @GregWard 如果我等待几件事,我可以依次等待。尤其是在这种情况下。
    • 而且我不认为仅仅缺少这个细节会导致答案无用。
    • @antred 然后您应该调用.wait() 并使用(相当小的)超时并处理结果。 AFAIR,如果上述进程尚未终止,则返回 None,如果已终止,则返回一个数字。
    • @glglgl 是的,这可行,虽然我想避免主动轮询,但我想可能没有办法解决它(我在 Windows 机器上)。此外,显然在这里问和回答了同样的事情:stackoverflow.com/questions/100624/…
    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 2022-01-23
    • 2011-06-26
    • 2016-06-13
    • 2013-08-11
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多