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 查找文件夹下所有文件 实现代码
Jul 01 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
Python实现最大子序和的方法示例
Jul 05 Python
Python with用法:自动关闭文件进程
Jul 10 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
Django和Flask框架优缺点对比
Oct 24 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 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代码
2013/03/24 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
Python Property属性的2种用法
2015/06/21 Python
python实现图书管理系统
2018/03/12 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python 基于opencv实现图像增强
2020/12/23 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
恶意软件的定义
2014/11/12 面试题
工艺工程师工作职责
2013/11/23 职场文书
实用求职信范文分享
2013/12/25 职场文书
食品安全宣传标语
2014/06/07 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
闪闪红星观后感
2015/06/08 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang