84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
人生最曼妙的风景,竟是内心的淡定与从容!
我觉得你的说法是对的。
import time from Queue import Queue from threading import Thread, activeCount G_WORKER_NUM = 1 G_COUNTER = 1 def do_something(q): q.get() global G_COUNTER G_COUNTER += 1 print(G_COUNTER) def main(): q = Queue() for n in xrange(G_WORKER_NUM): t = Thread(target=do_something, args=(q,)) t.start() q.put(('anything',)) q.put(('anything',)) q.put(('anything',)) if __name__ == '__main__': main() time.sleep(2) print activeCount()
Output:
说明线程确实是退出了。
或许作者只是想演示创建线程池来限制可以开启的线程数量,并没有做完整的项目考虑。例如线程池里面的线程肯定要能够重用,不能频繁的创建关闭;线程池的大小能够动态适应,当有一定数量的空闲线程就关掉部分,当线程都泡满了还不够用的时候,适当添加一些线程。具体,我觉得可以去查找相关的资料,肯定有解决方案。
他没有在主线程中写q.join()
q.join()
我觉得你的说法是对的。
Output:
说明线程确实是退出了。
或许作者只是想演示创建线程池来限制可以开启的线程数量,并没有做完整的项目考虑。例如线程池里面的线程肯定要能够重用,不能频繁的创建关闭;线程池的大小能够动态适应,当有一定数量的空闲线程就关掉部分,当线程都泡满了还不够用的时候,适当添加一些线程。具体,我觉得可以去查找相关的资料,肯定有解决方案。
他没有在主线程中写
q.join()