84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
欢迎选择我的课程,让我们一起见证您的进步~~
只要在 A 代码 p.close() 之后加一句 p.join() 就是等效的。
p.close()
p.join()
或者在 B 代码 p_fi.start() 之前加一句 p_fi.daemon = p_se.daemon = p_th.daemon = True 也是等效的(这时 B 代码也不能正常运行)。
p_fi.start()
p_fi.daemon = p_se.daemon = p_th.daemon = True
总之区别就是 A 代码没有等子进程完成就结束主进程了,B 代码等子进程完成再结束主进程。
更新完整代码后:
dict_init_queue = Queue()
需要改为:
from multiprocessing import Manager manager = Manager() dict_init_queue = manager.Queue()
否则不能在进程之间共享队列。
楼上说得对 再close之后,应该要有一个join 来等待执行结束
我是看了 https://github.com/shazow/workerpool 这个项目的代码 才知道的
只要在 A 代码
p.close()
之后加一句p.join()
就是等效的。或者在 B 代码
p_fi.start()
之前加一句p_fi.daemon = p_se.daemon = p_th.daemon = True
也是等效的(这时 B 代码也不能正常运行)。总之区别就是 A 代码没有等子进程完成就结束主进程了,B 代码等子进程完成再结束主进程。
更新完整代码后:
需要改为:
否则不能在进程之间共享队列。
楼上说得对 再close之后,应该要有一个join 来等待执行结束
我是看了 https://github.com/shazow/workerpool 这个项目的代码 才知道的