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中__call__方法示例分析
Oct 11 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
使用Python实现在Windows下安装Django
Oct 17 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 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绘制一个矩形的方法
2015/01/24 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
js实现简单div拖拽功能实例
2015/05/12 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python快速从注释生成文档的方法
2016/12/26 Python
python版简单工厂模式
2017/10/16 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python根据服务获取端口号的方法
2019/09/25 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python 实现让字典的value 成为列表
2019/12/16 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
校园学雷锋活动月总结
2014/03/09 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
外出学习心得体会范文
2016/01/18 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫