python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求
加入我们需要处理一串个位数(0~9),奇数时需要循环打印它;偶数则等待对应时长并完成所有任务;0则是错误,但不需要终止任务,可以自定义一些处理。
关键点
定义func函数处理需求
callback处理返回结果,只有偶数和0返回;奇数会一直执行;要控制线程池状态,则需要针对偶数和0时抛出异常,并捕获异常处理。
threadpool定义线程池并发
实现# -*- coding: utf-8 -*-
from threadpool import makeRequests, ThreadPool
import time
from multiprocessing import Process
异常定义和特殊值(0)定义class Finish(SyntaxWarning):
passclass PauseInfo(SyntaxWarning):
pass
pause_num = 0
func函数定义
0时返回False,其他偶数返回Truedef func(para):
if para == pause_num:
print('start for %d and wait %ds' % (para, 4))
time.sleep(4)
print('error bcs ',para)
return False
if para % 2 == 0:
print('start for %d and wait %ds' % (para, para))
time.sleep(para)
print('stop for', para)
return True
while True:
print('continue for', para)
time.sleep(para)
callback定义def callback(request, result):
if result:
raise Finish
else:
raise PauseInfo
线程池处理
Finish标识任务完成,再次诱发异常退出线程池处理;def main_thread(paras):
pool = ThreadPool(10)
requests = makeRequests(callable_=func, args_list=paras, callback=callback)
[pool.putRequest(req) for req in requests]
while True:
try:
pool.wait()
except Finish as e:
raise SystemExit
except PauseInfo as e:
print('Pause bcs %d but will continue' % pause_num)
except Exception as e:
print('Unknown error so will quit')
raise SystemExit
主函数起一个测试进程if name == 'main':
while True:
s = input('Input number list to test and any other word to quit\n')
paras = []
for para in s:
if para.isnumeric():
paras.append(int(para))
else:
break
try:
thread_test = Process(target=main_thread, args=(paras,))
thread_test.start()
thread_test.join(timeout=20)
except TimeoutError as e:
print('task timeout')
except Exception as e:
print('unknow error:',e)
结果验证
处理108,看打印可以看到,1被循环处理,0处理的时候报错;8处理完毕则任务结束
Input number list to test and any other word to quit
108
continue for 1
start for 0 and wait 4s
start for 8 and wait 8s
continue for 1
continue for 1
continue for 1
error bcs 0
continue for 1
Pause bcs 0 but will continue
continue for 1
continue for 1
continue for 1
continue for 1
stop for 8
Input number list to test and any other word to quit
以上就是详解python中Threadpool线程池任务终止示例代码的详细内容,更多请关注php中文网其它相关文章!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
python停止线程池_详解python中Threadpool线程池任务终止示例代码相关推荐
- java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法
Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...
- python 线程等待_详解python多线程之间的同步(一)
引言: 线程之间经常需要协同工作,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直到该线程完成对数据的操作.这些技术包括临界区(Critical Section),互斥量(Mute ...
- python变量定义大全_详解python变量与数据类型
这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...
- python多线程操作列表_详解Python多线程下的list
list 是 Python 常用的几个基本数据类型之一.正常情况下我们会对 list 有增删改查的操作,显然易见不会有任何问题.那么如果我们试着在多线程下操作list 会有问题吗? 多线程下的 lis ...
- python提取邮件附件_详解python实现读取邮件数据并下载附件的实例
详解python实现读取邮件数据并下载附件的实例 实现结果图: 实现代码: #!/usr/bin/python2.7 # _*_ coding: utf-8 _*_ """ ...
- python模块搜索原则_详解python模块路径查找规则及定义
在python中创建一个模块非常简单,只需要在当前目录下创建一个 .py文件即可,系统自动将其解析成模块,文件名就是模块名.很多我们源码时代的同学都认为在查找模块时优先使用当前目录下的自定义模块.其实 ...
- python提取hbase数据_详解python操作hbase数据的方法介绍
配置 thrift python使用的包 thrift 个人使用的python 编译器是pycharm community edition. 在工程中设置中,找到project interpreter ...
- python装饰器由浅入深_详解Python装饰器由浅入深
装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...
- python repair修复功能_详解Python修复遥感影像条带的两种方式
GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...
最新文章
- 从零开始搭建基于CEFGlue的CB/S的winform项目
- 单片机蓝牙初始化_单片机程序那些事
- python自学需要多久-怎么自学python,大概要多久?
- (十二)运行环境(加载、性能优化、安全)【这些会了,你就可以飞了】
- hibernate添加spring 事务管理注意问题记录
- php strip_tags 少,详解PHP函数 strip_tags的用法不足之处
- c++ break跳出几个循环_必须知道的C语言知识细节:break、continue语句区别
- 学python后到底能干什么-普通小白学会Python到底具体能做什么呢?
- android手机慢,Android手机运行慢?!教你一秒“提速”50%
- 6.go import
- 弱电箱只埋了一根网线时,如何上网和IPTV兼顾?
- wps桌面右键缺少新建文档入口
- 电脑护眼,老司机教你电脑护眼设置怎么开
- 用低代码+BPM赋能知识文档管理系统
- 勒索软件Cerber和TeslaCrypt的区别-------典型的勒索软件家族
- Flash:一个TLF图文并貌的高级应用类
- akka kafka java_Jay Kreps谈基于Apache Kafka和Kafka Streams的分布式流处理
- janus videoroom之媒体录制
- 选好食用油,为健康加油!
- 虚拟化大拿炮轰Citrix
热门文章
- linux 安装 redis3.0
- XP 终端服务组件 恢复补丁包 terminal service patch
- 配置事务springmvc3.1 mybatis 3.1 事务不起作用
- python调用电脑蜂鸣器一直响_电脑开机蜂鸣器一直响,9声滴~,什么问题?怎么处理?...
- 排序 (5)计数排序“概念”
- 《研磨设计模式》chap6 工厂模式factory(2)案例实现
- 全局变量/static静态变量在section段中的分布
- Docker核心原理之cgroups
- java IO流用法
- 渗透测试之地基服务篇:服务攻防之中间件JBoss