有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线程池——个人总结,如果你不喜欢就不要喷,勿...相关推荐

  1. notebook python 已停止工作_Python/Jupyter Notebook初学遇到的一些问题总结(20201108)...

    在开始之前先写下我的系统,window10家庭版,安装的是python3.8,没有安装anaconda 虽然大多数人都推荐安装anaconda,不过我实在是搞不明白anaconda,所以在这写一写我的 ...

  2. python爬取网页停止工作_python人员api停止工作

    我有一个python(2.7.10)代码,它基于位于https://developers.google.com/people/quickstart/python的"快速入门"示例, ...

  3. Tomcat线程池监控及线程池原理分析

      目录         一.背景         二.tomcat线程池监控         三.tomcat线程池原理         四.总结 一.背景 我们都知道稳定性.高可用对于一个系统来讲 ...

  4. 《手Q Android线程死锁监控与自动化分析实践》

    一.问题背景 手Q每个版本上线以后研发同学都会收到各种问题反馈.在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下: 1.问题表象:"未读不消失"."图片不展 ...

  5. matlab已经停止工作,win10系统运行Matlab弹出已停止工作窗口的修复步骤

    有关win10系统运行Matlab弹出已停止工作窗口的操作方法想必大家有所耳闻.但是能够对win10系统运行Matlab弹出已停止工作窗口进行实际操作的人却不多.其实解决win10系统运行Matlab ...

  6. 使命召唤16计算机内存不足,使命召唤16总是加载停止工作

    当我们在使用计算机来运行大型的应用程序或者是游戏进程的时候,对于一些游戏玩家在玩使命召唤16的过程中,游戏总是加载停止工作的情况,小编觉得可能是因为我们电脑的内存或者是驱动程序兼容性的问题,也有可能是 ...

  7. matlab已经停止工作,win7系统运行Matlab弹出已停止工作窗口的解决方法

    朋友们在使用win7系统电脑时,偶尔就会碰到系win7系统运行Matlab弹出已停止工作窗口的状况.如果在平时的使用过程中遇到win7系统运行Matlab弹出已停止工作窗口情况的话,相信许多朋友都不知 ...

  8. 线程池监控和动态配置

    线程池 线程池是一种 "池化" 的线程使用模式,通过创建一定数量的线程,让这些线程处于就绪状态来提高系统响应速度,在线程使用完成后归还到线程池来达到重复利用的目标,从而降低系统资源 ...

  9. 线程池参数详解及其工作原理

    线程池的作用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果提交的任务超过了线程能执行的最大数量,超出的数量的任务会被提交到一个阻塞队列排 ...

最新文章

  1. 刀片服务器在现有数据中心的应用策略
  2. Mybatis批量添加对象List
  3. Java 添加音频到ppt_Java 添加文本框到PPT幻灯片过程解析
  4. rs.Open SQL,Conn,adOpenStatic,adLockOptimistic
  5. 第三次作业(词频统计及其效能分析)
  6. Ubuntu18.04安装VCS、Verdi、dve全套教程亲测(有成功截图)
  7. 银行利率是5.45%,房贷是4.9%,有钱该提前还房贷还是存款?
  8. WinRAR在DOS下压缩/解压缩的使用方法
  9. NET Framework 4.0 安装失败:安装时发生严重错误
  10. code iban 是有什么组成_EAN-128码和Code-128码的区别
  11. Linux —— shell认识与基础命令
  12. ASTC纹理压缩格式(Adaptive Scalable Texture Compression)
  13. 新手建站之【网站备案】③
  14. 21年GitHub上最牛批的《Java工程师成神之路》最新版文档!限时开源
  15. 【Visual C++】游戏开发四十九 浅墨DirectX教程十七 三维天空的实现
  16. 第三周java实验报告
  17. 【DB笔试面试696】在Oracle中,什么OSWatcher工具?
  18. 迅为RK3568开发板Debian系统安装ToDesk
  19. 技术盛典,2016AppCan移动开发者大会即将开启
  20. hdu2191 买大米 多重背包 模板题

热门文章

  1. 已知三个用不同数制表示的整数_数学一轮复习26,数列的概念及简单表示法,常用方法及具体策略...
  2. postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
  3. linux HZ 值_Linux的serial串口控制台
  4. php new static,PHP中new self()和new static()的区别用法
  5. 搜狗浏览器怎么新建隐私窗口 搜狗浏览器开启隐私窗口教程
  6. Chrome谷歌浏览器76地址栏隐藏的HTTPS和WWW标记如何恢复
  7. mysql 数据库操作类_【数据库操作类】10个php操作数据库类下载
  8. Java容器解析——HashMap
  9. csdn如何插入多列表格?
  10. oracle 数据库日期定义,Oracle数据库实现日期遍历功能