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实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
NumPy 数组使用大全
Apr 25 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
python七种方法判断字符串是否包含子串
Aug 18 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
简单实现python聊天程序
2018/04/01 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
市场部规章制度
2014/01/24 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
青年教师个人总结
2015/02/11 职场文书
大学生学年个人总结
2015/02/15 职场文书
装修安全责任协议书
2016/03/22 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
delete in子查询不走索引问题分析
2022/07/07 MySQL