python实现线程池的方法

python实现线程池的方法,第1张

概述本文实例讲述了python实现线程池的方法。分享给大家供大家参考。具体如下:

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

总结

以上是内存溢出为你收集整理的python实现线程池的方法全部内容,希望文章能够帮你解决python实现线程池的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存