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实现倒计时的示例
Feb 14 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
node.js获取参数的常用方法(总结)
May 29 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
python 同时读取多个文件的例子
Jul 16 Python
django 模型中的计算字段实例
May 19 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python基于pyjnius库实现访问java类
Jul 31 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
PHP实现递归的三种方法
2020/07/04 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
用cssText批量修改样式
2009/08/29 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
Python实现k-means算法
2018/02/23 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
django下创建多个app并设置urls方法
2020/08/02 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
培训科主任岗位职责
2014/08/08 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
调解协议书范本
2016/03/21 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang