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随机生成数据后插入到PostgreSQL
Jul 28 Python
利用python批量检查网站的可用性
Sep 09 Python
基于python生成器封装的协程类
Mar 20 Python
python实时检测键盘输入函数的示例
Jul 17 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
简单了解python中的与或非运算
Sep 18 Python
python输入错误后删除的方法
Oct 12 Python
Python networkx包的实现
Feb 14 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
python开根号实例讲解
Aug 30 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/07/17 PHP
php5.3 注意事项说明
2013/07/01 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
跟我学Laravel之路由
2014/10/15 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
python中的django是做什么的
2020/07/31 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
自荐信的禁忌和要点
2013/10/15 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
优秀食品类广告词
2014/03/19 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
农村葬礼主持词
2014/03/31 职场文书
2014年党课学习材料
2014/05/11 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
介绍信格式
2015/01/30 职场文书
努力学习保证书
2015/02/26 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
MySQL的索引你了解吗
2022/03/13 MySQL
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers