(19)ThreadPoolExecutor线程池
# 线程池
# 实例化线程池 ThreadPoolExcutor (推荐cpu_count*(n+1))
# 异步提交任务 submit / map
# 阻塞直到任务完成 shutdown
# 获取子线程的返回值 result
# 使用回调函数 add_done_callback
(1)基本用法:
from concurrent.futures import ThreadPoolExecutor def func(i): print("thread is start",i) print("thread is end ") if __name__ == "__main__": p = ThreadPoolExecutor() p.submit(func,) #启动线程 p.shutdown() # 相当于join+close print("主线程")
执行结果:
thread is start 1
thread is end
主线程
(2)返回值 ( 通过对象.result()拿到结果 )
from concurrent.futures import ThreadPoolExecutor
def func(i):
print("thread %s start" % (i))
print("thread %s end" % (i))
return i * "*"
tp = ThreadPoolExecutor(5)
lst = []
for i in range(20):
res = tp.submit(func,i) #返回值也是对象
lst.append(res)
tp.shutdown()
for res in lst:
print(res.result())
执行结果:
thread 0 start
thread 0 end
thread 1 start
thread 2 start
thread 1 endthread 2 end thread 3 start
thread 3 end
thread 4 start
thread 4 end
thread 5 startthread 6 startthread 7 start
thread 7 end
thread 8 start
thread 8 end thread 9 start thread 6 end
thread 10 start
thread 10 end
thread 11 start
thread 11 end
thread 12 start
thread 12 end
thread 13 start
thread 13 end
thread 14 start
thread 14 end
thread 15 startthread 9 endthread 5 end
thread 16 start
thread 16 end
thread 17 start
thread 15 end
thread 18 start
thread 18 end
thread 19 start
thread 17 end thread 19 end *
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
主线程
(3)map 返回生成器
from concurrent.futures import ThreadPoolExecutor
from threading import current_thread as ct
def func(i):
print("thread",i,ct().ident)
print("thread %s end" % (i))
return i * "*"
tp = ThreadPoolExecutor(5)
res = tp.map(func,range(20))
tp.shutdown()
for i in res: # 生成器
print(i)
执行结果:
thread 0 9336
thread 0 end
thread 1 9336
thread 1 end
thread 2 9336
thread 2 end
thread 3 3348
thread 3 end
thread 4 10116
thread 4 end
thread 5 3348
thread 5 endthread
thread thread7 8 9292
thread 8 end
6 thread 9 9336
thread 6 end
thread9292
thread 9 end
thread 11 10 9336 9292 threadthread 10 end
thread 13 thread3348
thread 11 end
thread 15 thread 7 end
thread 16 12 9292
thread 15 end
14 3348
thread 16 end
10116
thread 14 endthread 17 3348
thread 17 end
thread thread 19 3348
thread 19 end 10068933618 thread 13 end
thread 12 end 9292 thread 18 end *
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
(19)ThreadPoolExecutor线程池的更多相关文章
- 源码剖析ThreadPoolExecutor线程池及阻塞队列
本文章对ThreadPoolExecutor线程池的底层源码进行分析,线程池如何起到了线程复用.又是如何进行维护我们的线程任务的呢?我们直接进入正题: 首先我们看一下ThreadPoolExecuto ...
- 13.ThreadPoolExecutor线程池之submit方法
jdk1.7.0_79 在上一篇<ThreadPoolExecutor线程池原理及其execute方法>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法 ...
- ThreadPoolExecutor 线程池的源码解析
1.背景介绍 上一篇从整体上介绍了Executor接口,从上一篇我们知道了Executor框架的最顶层实现是ThreadPoolExecutor类,Executors工厂类中提供的newSchedul ...
- j.u.c系列(01) ---初探ThreadPoolExecutor线程池
写在前面 之前探索tomcat7启动的过程中,使用了线程池(ThreadPoolExecutor)的技术 public void createExecutor() { internalExecutor ...
- Java并发——ThreadPoolExecutor线程池解析及Executor创建线程常见四种方式
前言: 在刚学Java并发的时候基本上第一个demo都会写new Thread来创建线程.但是随着学的深入之后发现基本上都是使用线程池来直接获取线程.那么为什么会有这样的情况发生呢? new Thre ...
- ThreadPoolExecutor 线程池
TestThreadPoolExecutorMain package core.test.threadpool; import java.util.concurrent.ArrayBlockingQu ...
- 十、自定义ThreadPoolExecutor线程池
自定义ThreadPoolExecutor线程池 自定义线程池需要遵循的规则 [1]线程池大小的设置 1.计算密集型: 顾名思义就是应用需要非常多的CPU计算资源,在多核CPU时代,我们要让每一个CP ...
- Executors、ThreadPoolExecutor线程池讲解
官方+白话讲解Executors.ThreadPoolExecutor线程池使用 Executors:JDK给提供的线程工具类,静态方法构建线程池服务ExecutorService,也就是Thread ...
- SpringBoot项目框架下ThreadPoolExecutor线程池+Queue缓冲队列实现高并发中进行下单业务
主要是自己在项目中(中小型项目) 有支付下单业务(只是办理VIP,没有涉及到商品库存),目前用户量还没有上来,目前没有出现问题,但是想到如果用户量变大,下单并发量变大,可能会出现一系列的问题,趁着空闲 ...
随机推荐
- Oracle启动关闭
启动: [oracle@oracleSigle ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov ...
- C#基础加强(8)之委托和事件
委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...
- 在ABP中使用linq
private IQueryable<MembershipEntity> SelectOrScrrenMember(GetMemberInput input) { string[] use ...
- Python requests库如何下载一个图片资源
原文地址https://blog.csdn.net/u011541946/article/details/77700074 前面一篇文章介绍了response对象的一些常用API,也已经提到,我们的重 ...
- 深入理解Java虚拟机6-chap8-9-斗者3星
一.虚拟机字节码执行引擎 1.虚拟机执行引擎由自己实现,所以可以自行制定指令集与执行引擎的体系结构,并且可以执行那些不被硬件直接支持的指令集格式. 2.执行引擎 编译执行:通过JIT编译器产生本地代码 ...
- Python压缩指定文件及文件夹为zip
Python压缩指定的文件及文件夹为.zip 代码: def zipDir(dirpath,outFullName): """ 压缩指定文件夹 :param dirpat ...
- phpstudy----------phpstudy开启apache日志并且按照日期划分创建。
1.CustomLog "|bin/rotatelogs.exe logs/access_%Y_%m_%d.log 86400 480" combined 这里修改成上图所示,然后 ...
- python模拟面试技术题答案
目录 Python4期模拟面试技术面试题答案............................................................................ ...
- C# Newtonsoft.Json JsonSerializerSettings 全局序列化设置
Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings(); JsonC ...
- 笔记-ASP.NET WebApi
本文是针对ASP.NET WepApi 2 的笔记. Web API 可返回的结果: 1.void 2.HttpResponseMessage 3.IHttpActionResult 4.其他类型 返 ...