【问题标题】:Run Python scripts in parallel and wait for all to finish before executing more parallel scripts并行运行 Python 脚本并等待全部完成,然后再执行更多并行脚本
【发布时间】:2018-11-28 18:34:27
【问题描述】:

我需要并行执行我的 Python 脚本,因此我使用以下批处理文件:

start python C:\myfolder\1.py
start python C:\myfolder\2.py
start python C:\myfolder\3.py

它工作正常,但现在我需要在上述前三个完成后并行运行三个脚本。如何在同一个批处理文件中指定?

【问题讨论】:

  • 我不确定这是否是一个很好的欺骗目标(因为您的要求略有不同),但您见过this question吗?
  • 可能是this问题的欺骗
  • @jedwards 如果将前三个并行运行放入一个批处理文件中,第二组放入第二个批处理文件中,那么您可以创建一个调用两个批处理文件的包装批处理文件链接中提到的/wait 语法。
  • 您的 Windows 版本上是否有 bash?如果是这样,那就简单了。
  • 你试过,要么从第三行删除start,要么在第三行使用start /wait;在为接下来的三行重复并行序列之前?

标签: python windows python-2.7 batch-file parallel-processing


【解决方案1】:

我认为它应该像这样工作:

(
    start python C:\myfolder\1.py
    start python C:\myfolder\2.py
    start python C:\myfolder\3.py
) | pause

解释见this answer

【讨论】:

  • 我试过这个,它没有等待前三个脚本完成。它立即执行了) | pause 下面的所有脚本。
  • 嗯,奇怪......对我来说它有效,只有在所有 Python 脚本终止时,pause 之后才会继续执行;当然,我不知道你的 Python 脚本是做什么的;他们会写信给STD_OUT吗?
【解决方案2】:

您可以在 python 中轻松完成此操作,而无需使用 Windows 批处理命令。

您可以使用subprocess 库同时运行外部脚本,然后等待它们全部完成。

processes = []
scripts = [
    r'C:\myfolder\1.py',
    r'C:\myfolder\2.py',
    r'C:\myfolder\3.py',
]
for script in scripts:
    p = subprocess.Popen(['python', script])
    processes.append(p)

for p in processes:
    p.wait()

# Run other processes here

【讨论】:

  • 当我尝试这个时,我得到了一堆这些错误:[60360:53644:0619/113817.886:ERROR:page_load_metrics_update_dispatcher.cc(75)] Invalid response_start 0.11 s for parse_start 0.106 s
  • 这些是日志消息。它们很可能被您正在运行的任何脚本记录下来。
猜你喜欢
  • 2016-09-13
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2016-05-23
  • 1970-01-01
  • 2017-10-11
相关资源
最近更新 更多