最近一个项目上使用线程池,设定处理项1W,10线程,但是需要检测线程进行状态。出现错误N次,就自动终止线程。实现如下:

线程池代码

ERRORCOUNT=0

IS_EXIT=True

class Worker(Thread):

worker_count=0

timeout=1

def __init__(self, workQueue,resultQueue,**kwds):

Thread.__init__(self,**kwds)

self.id=Worker.worker_count

Worker.worker_count+=1

self.setDaemon(True)

self.workQueue=workQueue

self.resultQueue=resultQueue

self.start()

def run(self):

#the get-some-work,do-some-work main loop of worker threads

while IS_EXIT:

try:

callable,args,kwds=self.workQueue.get(timeout=Worker.timeout)

res=callable(*args,**kwds)

self.resultQueue.put(res)

except Queue.Empty:

break

except:

pass

class WorkerManager:

def __init__(self, num_of_workers=10,timeout=2):

self.workQueue=Queue.Queue()

self.resultQueue=Queue.Queue()

self.workers=[]

self.timeout=timeout

self._recruitThreads(num_of_workers)

def _recruitThreads(self,num_of_workers):

for i in range(num_of_workers):

worker=Worker(self.workQueue,self.resultQueue)

self.workers.append(worker)

def wait_for_complete(self):

#then,wait for each of them to terminate

while len(self.workers):

worker=self.workers.pop()

worker.join(10)

if worker.isAlive() and not self.workQueue.empty():

self.workers.append(worker)

def add_job(self,callable,*args,**kwds):

self.workQueue.put((callable,args,kwds))

def get_result(self,*args,**kwds):

return self.resultQueue.get(*args,**kwds)

在WorkerManager中使用到一个全局变量IS_EXIT用来判断是否需要退出线程

调用线程代码

wm=WorkerManager(10)#10线程

for i in range(10000):

wm.add_job(do_job)

wm.wait_for_complete()

具体工作代码

def do_job():

global ERRORCOUNT

global IS_EXIT

try:

do anything

except:

ERRORCOUNT+=1

if ERRORCOUNT>5:

IS_EXIT=False

此处使用了全局变量ERRORCOUNT统计错误数量,超过指定次数,则设置IS_EXIT=False通知线程停止执行。

至此基本上满足项目所需,但并不友好,应有更好的方式。

python线程池如何调度,python线程池控制相关推荐

  1. api windows 线程加锁_Windows 进程与线程管理

    第六章 进程与线程管理 本章我们把注意力集中到Windows 的进程.线程与作业对象上.正如我们在前面的章节中所述的,Windows的设计以基于对象的思想作为基础.在本章的第一节中,主要介绍进程与线程 ...

  2. python结束线程池正在运行的线程_python之线程与线程池

    #进程是资源分配的最小单位,线程是CPU调度的最小单位.每一个进程中至少有一个线程.#传统的不确切使用线程的程序称为只含有一个线程或单线程程序,而可以使用线程的程序被称为多线程程序,在程序中使用一个线 ...

  3. python异步线程算法应用_Python多线程----线程池以及线程实现异步任务

    了解异步编程 楼主在工作中遇到了以下问题,开发接口爬取数据代码完成之后要写入redis缓存,但是在写入缓存的过程花费2-3s,进行这样就大大影响了接口的性能,于是想到了使用异步存储. 传统的同步编程是 ...

  4. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步

    主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...

  5. python 线程池回收_python实现线程池

    这段时间一直在做一个爬虫系统,用python和django实现.其中涉及到了多线程的问题,在后端使用一个全局的字典用来保存和识别已经运行的线程.但是觉得这样的实现不是不太舒服.于是想找到一个更好的实现 ...

  6. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  7. Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...

  8. python进程池和线程池_Python中的进程池与线程池(包含代码)

    引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...

  9. 线程池原理及python实现

    https://www.cnblogs.com/goodhacker/p/3359985.html 为什么需要线程池 目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有 ...

  10. python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例

    本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能. 进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中appl ...

最新文章

  1. SAP QM 事务代码QAC2的BUG?
  2. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...
  3. 分页请求json数据_pyspider抓取虎嗅网文章数据
  4. PMCAFF | 产品经理挑战赛,等你来战
  5. three.js两个点给线条加宽度_用感性的方式练习线条,凤尾花21,彩铅手绘教程...
  6. 适合oracle运行的软件环境,创建最适合的Oracle运行环境
  7. 加载geojson面数据_地理数据可视化
  8. 多条实体类数据怎么接受_解决并发问题,数据库常用的两把锁!
  9. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
  10. 修改sqlserver编码为utf8_修改Matlab默认编码格式为UTF-8
  11. MyBatis-Plus updateById方法更新不了空字符串/null解决方法
  12. Principle 5.14 完美汉化版 Mac平台交互动效设计神器
  13. ionic 实时调试android手机
  14. ”小糊涂“与美女网站的收费机制
  15. win10计算机用户名修改密码,win10怎么修改登录用户名 win10修改开机密码的详细教程...
  16. 软考-程序员-资料整理1
  17. Python操作*.cfg配置文件
  18. Unity可编程渲染管线系列(一)自定义管线(控制渲染)
  19. 百度产品战略的变化历程
  20. FFmpeg音频解码流程详解及简单demo参考

热门文章

  1. python画心形代码大全_七夕,程序员的表白代码
  2. Ajax文件上传(formdata)
  3. 计算机组成原理(第六版)白中英 戴志涛主编答案
  4. 基于SSM框架的简单图书管理系统
  5. b站弹幕姬python_自用 Bilibili 弹幕姬 for macOS
  6. bilibili弹幕下载方法
  7. 关于tp框架token
  8. 几款好用的滤波器设计软件
  9. 印前软件 数码打样 管理软件
  10. 探索关系抽取中的多变知识