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中的面向对象编程详解(上)
Apr 13 Python
Python中逗号的三种作用实例分析
Jun 08 Python
利用Python破解验证码实例详解
Dec 08 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
Django 框架模型操作入门教程
Nov 05 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
如何在django中实现分页功能
Apr 22 Python
深入了解Python enumerate和zip
Jul 16 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 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数组键值用法实例分析
2015/02/27 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
学生励志演讲稿
2014/01/06 职场文书
接受捐赠答谢词
2014/01/27 职场文书
毕业寄语大全
2014/04/09 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
公开承诺书格式
2014/05/21 职场文书
2014年秘书工作总结
2014/11/25 职场文书
放假通知格式
2015/04/14 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书