我对python线程池的理解
#!/usr/bin/env python
from Queue import Queue
from threading import Thread
import random
import time
def person(i,q):
while True: #这个人一直处与可以接活干的状态
q.get()
print "Thread",i,"do_job"
time.sleep(random.randint(1,5))#每个人干活的时间不一样,自然就会导致每个人分配的件数不同(这里是干活的地方)
q.task_done() #接到的活做完了,向上汇报
q=Queue()
分配1000件活
for x in xrange(100):
q.put(x)
叫了5个人去干活
for i in xrange(5):
worker=Thread(target=person,args=(i,q))
worker.setDaemon(True)
worker.start()
q.join() #这5个人把1000件活都做完后,结束.
线程池的概念就是我们将1000件活,原本由1000个人来做,现在只分配5个人来做,这5个人就是线程池数,并且他们处与一直运行状态,除非主程序结束,否则,将不会结束。
测试:
我们现不分配活给他们,看他们处与什么状态.
注释
#for x in xrange(100):
# q.put(x)
并且在q.join()后面添加
time.sleep(120) 主程序2分钟后退出。
查看:
root@badboy-virtual-machine:~#ps aux|grep test.py
root 3907 0.0 0.2 54344 4400 pts/0 Sl+ 15:56 0:00 python test.py
root@badboy-virtual-machine:~# pstree -p |grep python
|-sshd(937)---sshd(2729)-+-bash(2850)---python(3907)-+-{python}(3908)
| | |-{python}(3909)
| | |-{python}(3910)
| | |-{python}(3911)
| | `-{python}(3912)
看到没,虽然他们现在没接到任务,但他们一直处与活动状态,随时接受任务.
如果想了解更多,请关注我们的公众号
公众号ID:opdevos
扫码关注
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341