【问题标题】:How can I manage these subprocesses efficiently?如何有效地管理这些子流程?
【发布时间】:2010-07-02 08:04:34
【问题描述】:

我有一个脚本可以下载然后转换视频。我正在尝试一次完成所有下载(很多 wget),然后在完成后进行转换。现在我必须等待每个文件单独下载,然后在完成后转换。我希望所有下载请求同时运行。

这是我的“下载”脚本中阻止所有内容的部分。

for id  in ids:
    subprocess.Popen(cmd, shell=True).wait()

我的“转换”脚本正在等待下载脚本完成。 (这是必要的,因为我正在使用下载集来组织所有内容。)

我可以使用队列,但我已经把它弄得一团糟,我希望有一个更简单的解决方案。

谢谢

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    你可以使用

    process_list = []    
    for id  in ids:
        process_list.append(subprocess.Popen(cmd, shell=True))
    for process in process_list:
        process.wait()
    

    因此,您将在同时作业结束时等待。

    【讨论】:

      【解决方案2】:

      如果适用于您的平台,您可以使用xargs 作为简单的解决方案。

      来自手册页:

         -P max-procs
                Run  up  to max-procs processes at a time; the default is 1.  If
                max-procs is 0, xargs will run as many processes as possible  at
                a  time.   Use the -n option with -P; otherwise chances are that
                only one exec will be done.
      

      当然有更好的解决方案,但如果您需要一个快速的解决方案,这可能是最容易实现的。

      【讨论】:

      • 我对 Linux 不太熟悉,并且无法看到它是如何工作的。我会将我的 for 循环中生成的所有 shell 命令传递给 xargs,然后等待吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2013-09-14
      • 2013-09-05
      • 2021-12-03
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多