【发布时间】:2015-09-24 01:40:35
【问题描述】:
我的问题与以下代码有关:
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()方法将为您完成睡眠,并且可能更有效。 -
在主线程中调用
t.join()以获得“已经完成”t没有害处。但是,一般的原则是在启动子线程后加入,以便让主线程等待子线程完成其任务。 -
@Kevin 我添加了一条评论。只需考虑 main 在加入子进程之前必须做一些工作。
标签: python python-2.7 process parallel-processing multiprocessing