Python os.fork()

时间:2017-01-23 18:18:30

标签: python python-2.7 python-3.x

如何为每个项目创建一个进程,并让父进程等待所有内容完成? 我有这个伪代码,并希望为每个requestImage(url)创建一个fork

page = requestPage(url)
additionalImages = parseHTML(page)
for urlImage in additionalImages:
    image = requestImage(url)
renderPage()

我知道如何创建一个新进程os.fork(),我只是不确定如何让父进程等待,比如os.waitpid(,0)?

编辑:不确定这是否有效

children = []
page = requestPage(url)
additionalImages = parseHTML(page)
for urlImage in additionalImages:
     pid = os.fork()
     if pid == 0:
         children.append(pid)
         image = requestImage(url)
     else:
         pass
for child in children:
    os.waitpid(pid, 0)
renderPage()

2 个答案:

答案 0 :(得分:0)

__doc__的{​​{1}}说:

  

等待完成给定的子进程。

所以,是的,这就是你想要使用的东西。

答案 1 :(得分:0)

您拥有的示例将无法按原样运行,因为您没有PID进入要检查waitpid的第二个循环。如果你在那里使用0作为PID,你可能没问题,因为这将检查任何子进程是否已完成。

你在做什么? Linux和Windows对waitpid有不同的行为。

另外,你可能想考虑使用subprocess.Popen而不是os.fork,我发现它更容易控制,特别是如果你需要与子进程通信。