Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程
利用线程池启动线程
submit与map启动线程
利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制
from concurrent.futures import ThreadPoolExecutor as tpe
from concurrent.futures import ProcessPoolExecutor as ppe
from time import ctime, sleep
from random import randint def foo(x, name):
print('%s%d starting at' % (name, x), ctime())
sleep(randint(1, 7))
print('%s%d completed at' % (name, x), ctime()) # Use submit function
print('-----Using submit function-----')
#executor = tpe(7)
#with executor:
with tpe(7) as executor:
for i in range(5):
executor.submit(foo, i, 'No.') # Use map function
print('-----Using map function-----')
with tpe(7) as executor:
executor.map(foo, range(5), ['No_a.', 'No_b.', 'No_c.', 'No_d.', 'No_e.']) # TODO: Learn more about ProcessPoolExecutor
"""
with ppe(2) as executor:
executor.submit(foo, 1, 'No.')
"""
定义foo方法,并运用两种方式启动线程池执行器,其中with tpe(7) as executor语句等价于executor = tpe(), with executor,with的上下文管理可以保证执行器在所有submit的foo函数完成之前挂起等待。
运行得到结果
-----Using submit function-----
No.0 starting at Wed Aug 2 14:33:06 2017
No.1 starting at Wed Aug 2 14:33:06 2017
No.2 starting at Wed Aug 2 14:33:06 2017
No.3 starting at Wed Aug 2 14:33:06 2017
No.4 starting at Wed Aug 2 14:33:06 2017
No.2 completed at Wed Aug 2 14:33:07 2017
No.0 completed at Wed Aug 2 14:33:08 2017
No.3 completed at Wed Aug 2 14:33:08 2017
No.1 completed at Wed Aug 2 14:33:09 2017
No.4 completed at Wed Aug 2 14:33:13 2017
-----Using map function-----
No_a.0 starting at Wed Aug 2 14:33:13 2017
No_b.1 starting at Wed Aug 2 14:33:13 2017
No_c.2 starting at Wed Aug 2 14:33:13 2017
No_d.3 starting at Wed Aug 2 14:33:13 2017
No_e.4 starting at Wed Aug 2 14:33:13 2017
No_b.1 completed at Wed Aug 2 14:33:14 2017
No_c.2 completed at Wed Aug 2 14:33:14 2017
No_d.3 completed at Wed Aug 2 14:33:14 2017
No_a.0 completed at Wed Aug 2 14:33:18 2017
No_e.4 completed at Wed Aug 2 14:33:18 2017
查看结果可以看出,两者效果相近。
未完待续...
相关阅读
Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程的更多相关文章
- 高并发的epoll+线程池,线程池专注实现业务
我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理.通常多线程模型下 ...
- .NET线程池最大线程数的限制-记一次IIS并发瓶颈
.NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...
- java并发编程(十五)----(线程池)java线程池简介
好的软件设计不建议手动创建和销毁线程.线程的创建和销毁是非常耗 CPU 和内存的,因为这需要 JVM 和操作系统的参与.64位 JVM 默认线程栈是大小1 MB.这就是为什么说在请求频繁时为每个小的请 ...
- java并发编程(十七)----(线程池)java线程池架构和原理
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...
- 《Go语言实战》摘录:6.1 并发 - 并行 与 并发
6.1 并行 与 并发
- java并发编程(十八)----(线程池)java线程池框架Fork-Join
还记得我们在初始介绍线程池的时候提到了Executor框架的体系,到现在为止我们只有一个没有介绍,与ThreadPoolExecutor一样继承与AbstractExecutorService的For ...
- Java并发(八)计算线程池最佳线程数
目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
思路来源:http://bbs.csdn.NET/topics/390819824,引用该页面某网友提供的方法. 题目:我现在有100个任务,需要多线程去完成,但是要限定同时并发数量不能超过5个. 原 ...
- java并发编程(十六)----(线程池)java线程池的使用
上节我们简单介绍了线程池,这次我们就来使用一下.Executors提供四种线程池,分别是:newCachedThreadPool,newFixedThreadPool ,newScheduledThr ...
随机推荐
- windows上php环境下memcache和mongodb的安装
mangodb安装 1. 下载mongodb的安装文件,我安装的windows 64位的,下载地址如下: https://fastdl.mongodb.org/win32/mongodb-win32- ...
- js 全局变量和局部变量
Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析 1.作用域和作用域链 2.变量声明提前
- STL之算法使用简介
accumlate : iterator 对标志的序列中的元素之和,加到一个由 init 指定的初始值上.重载的版本不再做加法,而是传进来的二元操作符被应用到元素上. adjacent_differ ...
- 原始套接字--arp相关
arp请求示例 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <un ...
- JavaWeb笔记(七)Filter&Listener
Filter 实现Filter接口 一般用于完成通用的操作,如:登陆验证.统一编码处理.敏感字符过滤等 执行流程 执行过滤器 执行放行后的资源 继续执行过滤器放行代码下的代码 配置 拦截路径配置 注解 ...
- hdu2010(dfs+剪枝)
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- ajax-高设3
ajax 1.XHR Ajax 技术的核心是 XMLHttpRequest 对象(简称 XHR),这是由微软首先引入的一个特性,其他浏览器提供商后来都提供了相同的实现.在 XHR 出现之前,Ajax ...
- TypeScript 3.0下react默认属性DefaultProps解决方案
ts和react的默认属性的四种解决方案 Non-null assertion operator(非空断言语句) Component type casting(组件类型重置) High order f ...
- 雅礼集训 Day6 T2 Equation 解题报告
Equation 题目描述 有一棵\(n\)个点的以\(1\)为根的树,以及\(n\)个整数变量\(x_i\).树上\(i\)的父亲是\(f_i\),每条边\((i,f_i)\)有一个权值\(w_i\ ...
- EAR、JAR、WAR(IT)
EAR文件包括整个项目,内含多个ejb module(jar文件)和web module(war文件) JAR.WAR.EAR.在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压 ...