我的问题涉及到下面的代码:使用join()方法在python多处理
import multiprocessing
import math
import time
def do_work():
for i in range(1,10,1):
math.cos(i)
workers = [ multiprocessing.Process(target=do_work) for i in xrange(20) ]
for t in workers:
t.daemon = True
t.start()
time.sleep(100) # put here to simply indicate main is busy doing something
for t in workers:
print t.name + " joining"
t.join()
正如你可以看到我的父进程的加盟在子进程之前睡了很长一段时间。我的子进程运行得非常快。
的问题是:
它是确定主进程如上面的例子在子进程加入之前等待很长的时间?当主流程加入时,子进程是否会成为僵尸存在危险?这段代码有问题吗?这种不好的代码在某种程度上?我该如何改进它?
我尝试:
我试着学习行为。对我来说似乎没问题。但我想我曾经看到一个孩子的过程变成了僵尸,至少有ps
输出显示。
为什么主要过程在等待?你在主流程中做了一些实际的工作,还是真的在睡觉?如果是后者,'join()'方法会为你睡觉,并且可能对它更有效。 – Kevin
调用't.join()'在主线程中已经完成''t'没有任何伤害。但是,一般原则是在启动子线程后加入,以便让主线程等待子线程完成其任务。 – ozgur
@Kevin我添加了评论。只要考虑到在加入子进程之前main已经做了一些工作。 – abc