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中for循环和while循环的基本使用方法
Aug 21 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
对python使用http、https代理的实例讲解
May 07 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
在双python下设置python3为默认的方法
Oct 31 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
Python新手学习标准库模块命名
May 29 Python
python3读取autocad图形文件.py实例
Jun 05 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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将向Java靠拢
2006/10/09 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
js中replace的用法总结
2013/12/27 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
Bootstrap基础学习
2015/06/16 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
JS实现图片切换特效
2019/12/23 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
python使用Apriori算法进行关联性解析
2017/12/21 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
python中如何使用虚拟环境
2020/10/14 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
广州品高软件.net笔面试题目
2012/04/18 面试题
自荐信模版
2013/10/24 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
教师求职自荐信
2014/03/09 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
师德师风个人整改措施
2014/10/27 职场文书
工程资料员岗位职责
2015/04/13 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis