python3 线程池监控线程是否停止工作_Python线程池——个人总结,如果你不喜欢就不要喷,勿...
有bug,请在评论区留下你得真言,谢谢
concurrent.futures 包含线程池和进程池,目前只记录线程池 ThreadPoolExecutor的使用
小二,上代码~
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
pool.shutdown(wait=True)
1.创建线程池ThreadPoolExecutor,max_workers:线程池的最大容量;thread_name_prefix:线程名称前缀,打印线程名称可查看
2.创建10个任务,给线程池执行,最大容量设置为4,所以只会同时执行4个任务
submit,执行任务,第一个参数test指定执行任务的函数,第二个参数指定给函数的参数
执行任务的函数,return,用于查看任务的执行结果
3.经过测试,当首次创建线程池时,是没有线程生成的,而是每提交一个任务给线程池,则会生成一个线程
生成的线程数=min(线程池容量(4),期望的任务数range(10))
线程池的线程执行完任务,不会被杀死,而是空闲状态,等待下个任务进来
4.pool.shutdown(),关闭线程池,结束线程,如果是想等所有任务完成,再关闭线程池,则设置pool.shutdown(wait=True)
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
print(future.done())
pool.shutdown(wait=True)
5.查看任务是否完成,future.done(),返回值是bool
from concurrent.futures import ThreadPoolExecutor
import threading
import time
def test(i):
print('threading name is %s, %s, %s' % (threading.current_thread().name, i, i+1))
time.sleep(1)
return 'finished'
def done_callback(future):
print(future.result())
print('it is stop %s' % threading.current_thread().name)
if __name__ == "__main__":
pool = ThreadPoolExecutor(max_workers=4, thread_name_prefix='test_')
list_t = []
for i in range(10):
future = pool.submit(test, i)
list_t.append(future)
# time.sleep(1.5)
future.add_done_callback(done_callback)
for t in list_t:
print(t.result())
print(threading.active_count())
pool.shutdown(wait=True)
print(threading.active_count())
异步回调,输出任务执行结果,future.add_done_callback(done_callback),done_callback()为回调函数,即任务执行完或者
退出就调用这个函数
注意:回调函数必须存在一个参数,代表调用函数的任务对象future,可以通过这个对象查看执行结果,future.result()
大家可能注意到,我这里注释了一行代码,sleep(),有这样两种情况:
1) 存在这行代码,执行回调函数,打印线程,是主线程
2) 不存在这行代码,执行回调函数,打印线程,是当前执行任务的线程
3) 总结:有个猜测,回调方法,是线程执行完任务就调用这个方法,如果sleep()阻塞,则这个future脱离了这个线程,只是一个对象,对于这个调用,变成了主线程执行,
大家有知道的评论区留下,谢谢
同步输入任务执行结果,通过列表存储这些任务,调用result()获取执行结果
threading.active_count():查询当前线程数:生成的线程数=min(线程池容量(4),期望的任务数range(10)) + 1(1代表主线程),关闭线程池后,数量为1,只剩下主线程,代表关闭线程池,则实现线程被杀死
python3 线程池监控线程是否停止工作_Python线程池——个人总结,如果你不喜欢就不要喷,勿...相关推荐
- notebook python 已停止工作_Python/Jupyter Notebook初学遇到的一些问题总结(20201108)...
在开始之前先写下我的系统,window10家庭版,安装的是python3.8,没有安装anaconda 虽然大多数人都推荐安装anaconda,不过我实在是搞不明白anaconda,所以在这写一写我的 ...
- python爬取网页停止工作_python人员api停止工作
我有一个python(2.7.10)代码,它基于位于https://developers.google.com/people/quickstart/python的"快速入门"示例, ...
- Tomcat线程池监控及线程池原理分析
目录 一.背景 二.tomcat线程池监控 三.tomcat线程池原理 四.总结 一.背景 我们都知道稳定性.高可用对于一个系统来讲 ...
- 《手Q Android线程死锁监控与自动化分析实践》
一.问题背景 手Q每个版本上线以后研发同学都会收到各种问题反馈.在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下: 1.问题表象:"未读不消失"."图片不展 ...
- matlab已经停止工作,win10系统运行Matlab弹出已停止工作窗口的修复步骤
有关win10系统运行Matlab弹出已停止工作窗口的操作方法想必大家有所耳闻.但是能够对win10系统运行Matlab弹出已停止工作窗口进行实际操作的人却不多.其实解决win10系统运行Matlab ...
- 使命召唤16计算机内存不足,使命召唤16总是加载停止工作
当我们在使用计算机来运行大型的应用程序或者是游戏进程的时候,对于一些游戏玩家在玩使命召唤16的过程中,游戏总是加载停止工作的情况,小编觉得可能是因为我们电脑的内存或者是驱动程序兼容性的问题,也有可能是 ...
- matlab已经停止工作,win7系统运行Matlab弹出已停止工作窗口的解决方法
朋友们在使用win7系统电脑时,偶尔就会碰到系win7系统运行Matlab弹出已停止工作窗口的状况.如果在平时的使用过程中遇到win7系统运行Matlab弹出已停止工作窗口情况的话,相信许多朋友都不知 ...
- 线程池监控和动态配置
线程池 线程池是一种 "池化" 的线程使用模式,通过创建一定数量的线程,让这些线程处于就绪状态来提高系统响应速度,在线程使用完成后归还到线程池来达到重复利用的目标,从而降低系统资源 ...
- 线程池参数详解及其工作原理
线程池的作用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果提交的任务超过了线程能执行的最大数量,超出的数量的任务会被提交到一个阻塞队列排 ...
最新文章
- 刀片服务器在现有数据中心的应用策略
- Mybatis批量添加对象List
- Java 添加音频到ppt_Java 添加文本框到PPT幻灯片过程解析
- rs.Open SQL,Conn,adOpenStatic,adLockOptimistic
- 第三次作业(词频统计及其效能分析)
- Ubuntu18.04安装VCS、Verdi、dve全套教程亲测(有成功截图)
- 银行利率是5.45%,房贷是4.9%,有钱该提前还房贷还是存款?
- WinRAR在DOS下压缩/解压缩的使用方法
- NET Framework 4.0 安装失败:安装时发生严重错误
- code iban 是有什么组成_EAN-128码和Code-128码的区别
- Linux —— shell认识与基础命令
- ASTC纹理压缩格式(Adaptive Scalable Texture Compression)
- 新手建站之【网站备案】③
- 21年GitHub上最牛批的《Java工程师成神之路》最新版文档!限时开源
- 【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现
- 第三周java实验报告
- 【DB笔试面试696】在Oracle中,什么OSWatcher工具?
- 迅为RK3568开发板Debian系统安装ToDesk
- 技术盛典,2016AppCan移动开发者大会即将开启
- hdu2191 买大米 多重背包 模板题
热门文章
- 已知三个用不同数制表示的整数_数学一轮复习26,数列的概念及简单表示法,常用方法及具体策略...
- postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
- linux HZ 值_Linux的serial串口控制台
- php new static,PHP中new self()和new static()的区别用法
- 搜狗浏览器怎么新建隐私窗口 搜狗浏览器开启隐私窗口教程
- Chrome谷歌浏览器76地址栏隐藏的HTTPS和WWW标记如何恢复
- mysql 数据库操作类_【数据库操作类】10个php操作数据库类下载
- Java容器解析——HashMap
- csdn如何插入多列表格?
- oracle 数据库日期定义,Oracle数据库实现日期遍历功能