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实现linux服务器批量修改密码并生成execl
Apr 22 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
python urllib爬虫模块使用解析
Sep 05 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
python主要用于哪些方向
Jul 05 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
python 自动识别并连接串口的实现
Jan 19 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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支持页面回退的两种方法
2008/01/10 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
php curl发送请求实例方法
2019/08/01 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
javascript正则表达式总结
2016/02/29 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
Django的models模型的具体使用
2019/07/15 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
python基于opencv 实现图像时钟
2021/01/04 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
搞笑婚前保证书
2015/02/28 职场文书
教师工作能力自我评价
2015/03/04 职场文书
高考1977观后感
2015/06/04 职场文书