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 相关文章推荐
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python列表append和+的区别浅析
Feb 02 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Python通过select实现异步IO的方法
Jun 04 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
Python 变量类型详解
Oct 10 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
Python 中判断列表是否为空的方法
Nov 24 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
django列表筛选功能的实现代码
Mar 27 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
Python调用C/C++的方法解析
Aug 05 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将时间差转换为字符串提示
2011/09/07 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
vuex实现简易计数器
2016/10/27 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
Python 自动补全(vim)
2014/11/30 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
python中K-means算法基础知识点
2021/01/25 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
浅谈HTML5 & CSS3的新交互特性
2016/07/19 HTML / CSS
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
自行车广告词大全
2014/03/21 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
科技活动周标语
2014/10/08 职场文书
农村党员干部承诺书
2015/05/04 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
Python编程源码报错解决方法总结经验分享
2021/10/05 Python