本来写一段代码,文件 IO 比较高,所以打算用多进程跑,子进程跑完的结果,通过放入 queue 中,最后再父进程中合并一下,但是子进程代码跑完就卡死了不动了。研究半天,最后把 from Multprocessing import Queue 换成了 from multiprocessing import Manager 中的 queue,然后代码可以跑完了,想了想是因为 Queue 只支持子进程通信,而 Manager 中的 queue 支持父子进程通信吗?
1
wuwenzhx 2018-06-11 15:41:41 +08:00
Manager 本身就是 python 用来实现共享内存的,Manager 中的 queue 当然是共享的啦,既然共享自然可以通信
|
2
RicardoScofileld OP @wuwenzhx 但是 multiprocessing 中的 Queue 不支持父子进程之间通信吗
|
3
wwqgtxx 2018-06-11 18:42:45 +08:00
Multprocessing.Queue 应该是用 pipe 实现的,如果父进程不及时把内容取走貌似会导致管道阻塞,至于 Multprocessing.Manager 是使用了类似于 tcp 通讯的方式,有后台线程持续读取 pipe 的消息,所以没事
|
4
RicardoScofileld OP @wwqgtxx 原来是这样,多谢指点
|