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编写android截屏脚本双击运行即可
Jul 21 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
python 字典(dict)按键和值排序
Jun 28 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
简单了解python的break、continue、pass
Jul 08 Python
python 插入日期数据到Oracle实例
Mar 02 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
安装pytorch时报sslerror错误的解决方案
May 17 Python
python 实现图与图之间的间距调整subplots_adjust
May 21 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
PHP中的日期及时间
2006/11/23 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
JavaScript 私有成员分析
2009/01/13 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
Python如何实现文本转语音
2016/08/08 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python批量修改ssh密码的实现
2019/08/08 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
大学生求职简历的自我评价
2013/10/14 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python