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的Bottle框架中使用微信API的示例
Apr 23 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
python 如何在list中找Topk的数值和索引
May 20 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
smarty中常用方法实例总结
2015/08/07 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
php桥接模式应用案例分析
2019/10/23 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python中str is not callable问题详解及解决办法
2017/02/10 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
最小二乘法及其python实现详解
2020/02/24 Python
python 如何对logging日志封装
2020/12/02 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
工作自荐信
2013/12/11 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
五年级下册复习计划
2015/01/19 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB