python实现线程池的方法


Posted in Python onJune 30, 2015

本文实例讲述了python实现线程池的方法。分享给大家供大家参考。具体如下:

原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码

文件名:thrd_pool.py 系统环境:ubuntu linux & python2.6

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 thrd_pool.py

执行结果:

count:0, thrd_name:Thread-1
count:1, thrd_name:Thread-2
count:2, thrd_name:Thread-3
count:3, thrd_name:Thread-4
count:4, thrd_name:Thread-5
count:5, thrd_name:Thread-1
count:6, thrd_name:Thread-6
count:7, thrd_name:Thread-2
count:8, thrd_name:Thread-3
count:9, thrd_name:Thread-4
count:10, thrd_name:Thread-5
count:11, thrd_name:Thread-1
count:12, thrd_name:Thread-6
count:13, thrd_name:Thread-2
count:14, thrd_name:Thread-3
('Oops! Got signal %s', 15)

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
python实现布隆过滤器及原理解析
Dec 08 Python
Django ModelForm操作及验证方式
Mar 30 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
python实现文字版扫雷
Apr 24 Python
Python Tornado核心及相关原理详解
Jun 24 Python
带你学习Python如何实现回归树模型
Jul 16 Python
python实现移动木板小游戏
Oct 09 Python
python实现的简单FTP上传下载文件实例
Jun 30 #Python
编写Python CGI脚本的教程
Jun 29 #Python
Python访问纯真IP数据库脚本分享
Jun 29 #Python
Python实现把数字转换成中文
Jun 29 #Python
Python中if __name__ == '__main__'作用解析
Jun 29 #Python
django接入新浪微博OAuth的方法
Jun 29 #Python
python链接Oracle数据库的方法
Jun 28 #Python
You might like
如何过滤高亮显示非法字符
2006/10/09 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
详解python基础之while循环及if判断
2017/08/24 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
python数据分析:关键字提取方式
2020/02/24 Python
建筑工程专业毕业生自荐信
2013/10/19 职场文书
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
合伙协议书
2014/04/23 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android