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文件写入实例分析
Apr 08 Python
为Python程序添加图形化界面的教程
Apr 29 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
Python操作mongodb的9个步骤
Jun 04 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
python中remove函数的踩坑记录
Jan 04 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
通过html表格发电子邮件
2006/10/09 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
php连接mysql数据库
2017/03/21 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
使用js检测浏览器的实现代码
2013/05/14 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
python抓取网页内容示例分享
2014/02/24 Python
学Python 3的理由和必要性
2019/11/19 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
python常量折叠基础知识点讲解
2021/02/28 Python
LINUX下线程,GDI类的解释
2012/04/17 面试题
职业规划书如何设计?
2014/01/09 职场文书
启动仪式策划方案
2014/06/14 职场文书
村创先争优活动总结
2014/08/28 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python