joinableQueue
可翻译:为可join的队列
该队列相比普通的Queue的区别在于该对列额外增加的了join函数
join函数的作用:
该函数为阻塞函数,会阻塞直到等待队列中所有数据都被处理完毕。
q = JoinableQueue() q.put(1) q.get() q.join() #阻塞 等待队列中所有数据都被处理完毕 print("over")
执行以上函数,将导致进程无法结束,注释掉join调用就正常,发现join的确有阻塞的效果,
但是队列中一共就一个数据,明明已经调用get取出了,为什么join依然阻塞呢?
这是因为get仅仅是取出数据,而join是等待数据处理完毕,也就是说:
取出数据还不算完,你处理完以后必须告知队列处理完毕,通过task_done
q = JoinableQueue() q.put(1) q.get() q.task_done() # 数据处理完毕 q.join() #阻塞 等待队列中所有数据都被处理完毕 print("over") #输出: # over
需要注意的时,task_done的调用次数必大于等于队列中的数据个数,join才能正常结束阻塞
q = JoinableQueue() q.put(1) q.put(1) q.get() q.task_done() # 数据处理完毕 q.join() #阻塞 等待队列中所有数据都被处理完毕 print("over") #输出: # over
总结:
主进程可以明确知道队列中的数据