我有一個啓動子進程(當前爲64)並執行一些工作的應用程序。 每個進程在大約45分鐘後完成,但父進程似乎掛起,因爲父進程不會退出並掛起在連接循環中。已完成子進程但父進程掛起
我開始proccesses這樣的:
def worker(out_q):
# do something that takes a lot of time
print('done working')
sys.exit(0)
def main():
procs = []
out_q = Queue()
for i in range(opt.num_threads):
sys.stdout.write("\r\tStarting Worker Process: %d" %(i+1))
sys.stdout.flush()
p = multiprocessing.Process(target=worker, args=(out_q,))
procs.append(p)
p.start()
#then i wait for all processes to finish:
try:
for i, p in enumerate(procs):
print("waiting for process %d" %i)
p.join()
print("process %d joined" %i)
except KeyboardInterrupt as e:
sys.exit(0)
if __name__ == "__main__":
main()
唯一的輸出我看到的是waiting for process 0
和所有工序均由內部完成後(我看到說done working
所有的進程,還有在進程列表中所有64個流程,父進程沒有完成 似乎父進程掛起,因爲它不能被任務管理器殺死。
我該如何調試,或者我需要殺死進程?爲什麼進程沒有調用sys.exit(0)後,從進程列表中刪除想孩子嗎?
工作人員是否在'out_q'中放置了某些東西?你是否消耗隊列? –
是的,他們這樣做。我在這裏看到這一個http://bugs.python.org/issue8237我現在檢查隊列得到了多滿,並嘗試執行一個隊列沖洗... – reox