Python实现线程池代码分享


Posted in Python onJune 21, 2015

原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码

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 相关文章推荐
python基础教程之对象和类的实际运用
Aug 29 Python
Python3中的2to3转换工具使用示例
Jun 12 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
Django之form组件自动校验数据实现
Jan 14 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
python 装饰器重要在哪
Feb 14 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
python操作xlsx格式文件并读取
Jun 02 Python
Python os模块学习笔记
Jun 21 #Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 #Python
Python实现删除文件但保留指定文件
Jun 21 #Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 #Python
让Python代码更快运行的5种方法
Jun 21 #Python
Python文件读取的3种方法及路径转义
Jun 21 #Python
Python多线程和队列操作实例
Jun 21 #Python
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
brook javascript框架介绍
2011/10/10 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
python线程的几种创建方式详解
2019/08/29 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
寒假思想汇报
2014/01/10 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
求职意向书
2014/07/29 职场文书
生活部的活动方案
2014/08/19 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
部队个人年终总结
2015/03/02 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python