我的問題涉及到下面的代碼:使用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