我们直接以代码示例来分析
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。 我们可以用上述示例,来实现一个简单的线程池