Python实现线程池代码分享


Posted in Python onJune 21, 2015

原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码

import threading
import time
import signal
import os
 
class task_info(object):
  def __init__(self):
    self.func = None
    self.parm0 = None
    self.parm1 = None
    self.parm2 = None
   
class 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 ti
   
class 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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python对数据库操作
Mar 28 Python
Python实现两款计算器功能示例
Dec 19 Python
Sublime开发python程序的示例代码
Jan 24 Python
python opencv之SURF算法示例
Feb 24 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python实现结构体代码实例
Feb 10 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
什么是Python包的循环导入
Sep 08 Python
Python os模块学习笔记
Jun 21 #Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 #Python
Python实现删除文件但保留指定文件
Jun 21 #Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 #Python
让Python代码更快运行的5种方法
Jun 21 #Python
Python文件读取的3种方法及路径转义
Jun 21 #Python
Python多线程和队列操作实例
Jun 21 #Python
You might like
php遍历数组的方法分享
2012/03/22 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
javascript jQuery插件练习
2008/12/24 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
ES10 特性的完整指南小结
2019/03/04 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
js实现录音上传功能
2019/11/22 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
四年级数学教学反思
2014/02/02 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
初中学习计划书范文
2014/09/15 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
租赁协议书
2015/01/27 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript