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 切片和range()用法说明
Mar 24 Python
使用Python生成url短链接的方法
May 04 Python
python抽取指定url页面的title方法
May 11 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
Jul 26 Python
Python OS模块实例详解
Apr 15 Python
Python基础学习之函数方法实例详解
Jun 18 Python
在vscode中配置python环境过程解析
Sep 28 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
keras 权重保存和权重载入方式
May 21 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Python中tkinter的用户登录管理的实现
Apr 22 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP4中session登录页面的应用
2008/07/25 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
Django 中 cookie的使用
2017/08/17 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
PHP7新增函数
2021/03/09 PHP
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
python实现类的静态变量用法实例
2015/05/08 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
数学教研活动总结
2014/07/02 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Python实现视频自动打码的示例代码
2022/04/08 Python