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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
用Python逐行分析文件方法
Jan 28 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
Python 如何反方向迭代一个序列
Jul 28 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
一个非常实用的php文件上传类
2017/07/04 PHP
js tab效果的实现代码
2009/12/26 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
nodeJS微信分享
2017/12/20 NodeJs
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python如何定义有默认参数的函数
2020/08/10 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
高校教师自荐信范文
2014/03/13 职场文书
新品发布会主持词
2014/04/02 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Python函数中的不定长参数相关知识总结
2021/06/24 Python
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技