如何有效地管理这些子流程?

时间:2010-07-02 08:04:34

标签: python subprocess

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

以下是我的“下载”脚本中保存所有内容的部分。

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

我的'convert'脚本在下载脚本上等待完成。 (这是必要的,因为我使用一组下载来组织一切。)

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

由于

2 个答案:

答案 0 :(得分:1)

你可以使用

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

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

答案 1 :(得分:0)

您可以使用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.

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