香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

python实现线程池的方法


时间:2021-12-08 14:52 作者:admin610456


本文实例讲述了python/' target='_blank'>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程序设计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)