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 相关文章推荐
Python3使用requests发闪存的方法
May 11 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
python让列表倒序输出的实例
Jun 25 Python
解决Django中多条件查询的问题
Jul 18 Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
Python中有几个关键字
Jun 04 Python
python/golang 删除链表中的元素
Sep 14 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
python实现Thrift服务端的方法
Apr 20 Python
python 实现德洛内三角剖分的操作
Apr 22 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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
php动态生成函数示例
2014/03/21 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
实例讲解Python中函数的调用与定义
2016/03/14 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
Python查看微信撤回消息代码
2018/06/07 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
PyTorch中的C++扩展实现
2020/04/02 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
网络方面基础面试题
2012/11/16 面试题
五一服装活动方案
2014/01/11 职场文书
药学职务聘任书
2014/03/29 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL