我们直接以代码示例来分析
1 | import queue |
我们查看queue.join()
的源码
1 | def join(self): |
1 | def put(self, item, block=True, timeout=None): |
1 | def task_done(self): |
根据上述源码我们可以知道,当调用了指定次数的task_done
时,join
方法或重新获取到锁,从而离开阻塞状态,对于我们定义的方法join(_queue, num)
,中先_queue.joins
,再put(None)
的原因,是因为我们消费时,当item
为None
时直接结束线程执行,而没有再调用一次task_done
。 我们可以用上述示例,来实现一个简单的线程池