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 相关文章推荐
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Python中的ceil()方法使用教程
May 14 Python
Python中用sleep()方法操作时间的教程
May 22 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
python学生管理系统开发
Jan 30 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 Python
Python JSON编解码方式原理详解
Jan 20 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
Python标准库之typing的用法(类型标注)
Jun 02 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 include,include_once,require,require_once
2008/09/05 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
幼师自荐信范文
2013/10/06 职场文书
给校长的建议书500字
2014/05/15 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
客户付款通知书
2015/04/23 职场文书
《海上日出》教学反思
2016/02/23 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers