我對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)
    看到沒,雖然他們如今沒接到任務,但他們一直處與活動狀態,隨時接受任務.
python


若是想了解更多,請關注咱們的公衆號
公衆號ID:opdevos
掃碼關注
bash

gongzhouhao.jpg

相關文章
相關標籤/搜索