python线程池如何调度,python线程池控制
最近一个项目上使用线程池,设定处理项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线程池控制相关推荐
- api windows 线程加锁_Windows 进程与线程管理
第六章 进程与线程管理 本章我们把注意力集中到Windows 的进程.线程与作业对象上.正如我们在前面的章节中所述的,Windows的设计以基于对象的思想作为基础.在本章的第一节中,主要介绍进程与线程 ...
- python结束线程池正在运行的线程_python之线程与线程池
#进程是资源分配的最小单位,线程是CPU调度的最小单位.每一个进程中至少有一个线程.#传统的不确切使用线程的程序称为只含有一个线程或单线程程序,而可以使用线程的程序被称为多线程程序,在程序中使用一个线 ...
- python异步线程算法应用_Python多线程----线程池以及线程实现异步任务
了解异步编程 楼主在工作中遇到了以下问题,开发接口爬取数据代码完成之后要写入redis缓存,但是在写入缓存的过程花费2-3s,进行这样就大大影响了接口的性能,于是想到了使用异步存储. 传统的同步编程是 ...
- Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步
主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...
- python 线程池回收_python实现线程池
这段时间一直在做一个爬虫系统,用python和django实现.其中涉及到了多线程的问题,在后端使用一个全局的字典用来保存和识别已经运行的线程.但是觉得这样的实现不是不太舒服.于是想找到一个更好的实现 ...
- Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...
- Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...
- python进程池和线程池_Python中的进程池与线程池(包含代码)
引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...
- 线程池原理及python实现
https://www.cnblogs.com/goodhacker/p/3359985.html 为什么需要线程池 目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有 ...
- python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能. 进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中appl ...
最新文章
- SAP QM 事务代码QAC2的BUG?
- 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...
- 分页请求json数据_pyspider抓取虎嗅网文章数据
- PMCAFF | 产品经理挑战赛,等你来战
- three.js两个点给线条加宽度_用感性的方式练习线条,凤尾花21,彩铅手绘教程...
- 适合oracle运行的软件环境,创建最适合的Oracle运行环境
- 加载geojson面数据_地理数据可视化
- 多条实体类数据怎么接受_解决并发问题,数据库常用的两把锁!
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
- 修改sqlserver编码为utf8_修改Matlab默认编码格式为UTF-8
- MyBatis-Plus updateById方法更新不了空字符串/null解决方法
- Principle 5.14 完美汉化版 Mac平台交互动效设计神器
- ionic 实时调试android手机
- ”小糊涂“与美女网站的收费机制
- win10计算机用户名修改密码,win10怎么修改登录用户名 win10修改开机密码的详细教程...
- 软考-程序员-资料整理1
- Python操作*.cfg配置文件
- Unity可编程渲染管线系列(一)自定义管线(控制渲染)
- 百度产品战略的变化历程
- FFmpeg音频解码流程详解及简单demo参考