国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現線程池的方法

2019-11-25 17:15:07
字體:
來源:轉載
供稿:網友

本文實例講述了python實現線程池的方法。分享給大家供大家參考。具體如下:

原理:建立一個任務隊列,然多個線程都從這個任務隊列中取出任務然后執行,當然任務隊列要加鎖,詳細請看代碼

文件名:thrd_pool.py 系統環境:ubuntu linux & python2.6

import threadingimport timeimport signalimport osclass task_info(object):  def __init__(self):    self.func = None    self.parm0 = None    self.parm1 = None    self.parm2 = Noneclass task_list(object):  def __init__(self):    self.tl = []    self.mutex = threading.Lock()    self.sem = threading.Semaphore(0)  def append(self, ti):    self.mutex.acquire()    self.tl.append(ti)    self.mutex.release()    self.sem.release()  def fetch(self):    self.sem.acquire()    self.mutex.acquire()    ti = self.tl.pop(0)        self.mutex.release()    return ticlass thrd(threading.Thread):  def __init__(self, tl):    threading.Thread.__init__(self)    self.tl = tl  def run(self):    while True:      tsk = self.tl.fetch()      tsk.func(tsk.parm0, tsk.parm1, tsk.parm2)  class thrd_pool(object):  def __init__(self, thd_count, tl):    self.thds = []    for i in range(thd_count):      self.thds.append(thrd(tl))  def run(self):    for thd in self.thds:      thd.start()def func(parm0=None, parm1=None, parm2=None):  print 'count:%s, thrd_name:%s'%(str(parm0), threading.currentThread().getName())def cleanup(signo, stkframe):  print ('Oops! Got signal %s', signo)    os._exit(0)if __name__ == '__main__':  signal.signal(signal.SIGINT, cleanup)  signal.signal(signal.SIGQUIT, cleanup)  signal.signal(signal.SIGTERM, cleanup)  tl = task_list()  tp = thrd_pool(6, tl)  tp.run()  count = 0  while True:    ti = task_info()    ti.parm0 = count    ti.func = func    tl.append(ti)    count += 1    time.sleep(2)  pass

執行方式:python thrd_pool.py

執行結果:

count:0, thrd_name:Thread-1count:1, thrd_name:Thread-2count:2, thrd_name:Thread-3count:3, thrd_name:Thread-4count:4, thrd_name:Thread-5count:5, thrd_name:Thread-1count:6, thrd_name:Thread-6count:7, thrd_name:Thread-2count:8, thrd_name:Thread-3count:9, thrd_name:Thread-4count:10, thrd_name:Thread-5count:11, thrd_name:Thread-1count:12, thrd_name:Thread-6count:13, thrd_name:Thread-2count:14, thrd_name:Thread-3('Oops! Got signal %s', 15)

希望本文所述對大家的Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保亭| 临泽县| 澄江县| 东台市| 德令哈市| 新河县| 铜陵市| 吴桥县| 武陟县| 板桥市| 固镇县| 凤冈县| 樟树市| 南乐县| 葫芦岛市| 东海县| 鸡西市| 富平县| 康马县| 韩城市| 东山县| 柘城县| 屏山县| 西华县| 惠安县| 佛坪县| 三门峡市| 眉山市| 南阳市| 大方县| 南通市| 安新县| 五家渠市| 南投市| 安乡县| 哈巴河县| 修武县| 龙泉市| 卢氏县| 长治县| 长乐市|