我对python线程池的理解

发布时间:2019-09-16 07:39:01编辑:auto阅读(1644)

    #!/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
    扫码关注

    gongzhouhao.jpg

关键字