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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
python判断设备是否联网的方法
Jun 29 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
python读写csv文件实例代码
Jul 05 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
django正续或者倒序查库实例
May 19 Python
python打开音乐文件的实例方法
Jul 21 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安装问题
2006/10/09 PHP
PHP用户指南-cookies部分
2006/10/09 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python3数字求和的实例
2019/02/19 Python
创建Django项目图文实例详解
2019/06/06 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
Python实现名片管理系统
2020/02/14 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
python opencv实现简易画图板
2020/08/27 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
高一英语教学反思
2014/01/22 职场文书
班长自荐书范文
2014/02/11 职场文书
广告学专业求职信
2014/06/19 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
买房子个人收入证明
2014/10/12 职场文书
初婚未育证明样本
2014/10/24 职场文书
小学校长个人总结
2015/03/03 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
导游词幽默开场白
2019/06/26 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python
Python实现照片卡通化
2021/12/06 Python