python进程池与线程池
文章目录
- python进程池与线程池
- 思考
- 简介
- 进程池与线程池基本使用
- concurrent.futures 介绍
- 基本方法
- 使用示例
python进程池与线程池
思考
能否无限制的开设进程或者线程?
1.单从技术层面来说,无限开设进程或线程是肯定可以的,并且这样也是最高效的
2.但是,由于硬件的原因,这个是实现不了的(毕竟硬件的发展永远都赶不上软件的发展速度),因此,就目前而言,肯定是不可以实现无限制开设进程或者线程
简介
池是什么?
- 池是为了在保证计算机硬件安全的情况下提升程序运行效率的工具
进程池:
- 指提前开设好一堆进程,只需要朝池子中提交任务,任务会自动分配给空闲的进程处理,并且池子中的进程创建好后就不会更替
线程池:
- 提前开设好一堆线程,只需要朝池子中提交任务,任务会自动分配给空闲的线程处理,并且池子中的线程创建好了之后就不会更替
进程池与线程池基本使用
- python中进程池线程池的使用,有专门的模块来调用(Python标准模块——concurrent.futures)
concurrent.futures 介绍
concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor:线程池,提供异步调用
ProcessPoolExecutor:进程池,提供异步调用
基本方法
submit(fn, *args, **kwargs):异步提交任务map(func, *iterables, timeout=None, chunksize=1):取代for循环submit的操作shutdown(wait=True):相当于进程池的pool.close()+pool.join()操作wait=True,等待池内所有任务执行完毕回收完资源后才继续wait=False,立即返回,并不会等待池内的任务执行完毕但不管wait参数为何值,整个程序都会等到所有任务执行完毕注意: submit和map必须在shutdown之前result(timeout=None):取得结果add_done_callback(fn):回调函数done():判断某一个线程是否完成cancle():取消某个任务
使用示例
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import time, os# 创建进程池与线程池
# pool = ThreadPoolExecutor(5) # 可以自定义线程数 也可以采用默认策略 默认是cpu核数
pool = ProcessPoolExecutor(5) # 可以自定义进程程数 也可以采用默认策略# 定义一个任务
def task(n):print(n, os.getpid())time.sleep(2)return '>>>:%s' % n ** 2# 定义一个回调函数:异步提交完之后有结果自动调用该函数
def call_back(a):print('异步回调函数:%s' % a.result())if __name__ == '__main__':
# 方案1# obj_list = [] # 解决问题1# for i in range(20):# res = pool.submit(task,i)# # print(res.result()) # result()直接放在submit下方,会使异步变同步 问题1# obj_list.append(res)## # 等待线程池中所有的任务执行完毕之后 再获取各自任务的结果# pool.shutdown()# for i in obj_list:# print(i.result()) # 获取任务的执行结果 同步# 方案二 使用add_done_callback回调函数for i in range(20):res = pool.submit(task, i).add_done_callback(call_back) # 异步提交,此方法不能配合shutdown使用"""
同步:提交完任务之后原地等待任务的返回结果 期间不做任何事
异步:提交完任务之后不愿地等待任务的返回结果 结果由异步回调机制自动反馈
"""
python进程池与线程池相关推荐
- python线程池模块_python并发编程之进程池,线程池,协程
需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...
- Python 37 进程池与线程池 、 协程
一:进程池与线程池 提交任务的两种方式: 1.同步调用:提交完一个任务之后,就在原地等待,等任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行 2.异步调用:提交完一个任务之后, ...
- python线程池模块_python并发编程之进程池,线程池,协程(Python标准模块--concurrent.futures(并发未来))...
需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...
- python 进程池阻塞和非阻塞_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...
9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO ...
- python进程池和线程池_Python中的进程池与线程池(包含代码)
引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...
- python进程池和线程池_python自带的进程池及线程池
进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...
- python是如何实现进程池和线程池的_高并发:线程、线程锁与线程池(精华),手写代码实现线程池...
前文: 单线程--多线程的开启--线程锁--线程同步工具--手写连接池--连接池工具类. 一.线程 1.线程的概念 2.线程与进程的关系 3.定义: 区别:如上!!! 4.wait()和sleep() ...
- python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
1. 2. 为啥要有 进程池和线程池 进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数 3.创建进程池的类pool 如果指定numprocess为3,则进程池会从无到有创建三 ...
最新文章
- 写给正在入坑linux系统的伙伴
- python3 32位_Python3.8.2安装教程
- 数据库系统概念总结:第十一章 索引与散列
- Spring Cloud 基于Consul 实现服务注册与发现
- android iphone对比度,对比度对比:显示器优势明显_苹果 MacBook Pro_液晶显示器评测-中关村在线...
- 安卓--selector简单使用
- Unity Shader之入门-helloworld
- 执行mount挂载命令 报错:mount: you must specify the filesystem type
- [论文翻译] Estimation of Image Rotation Angle Using Interpolation-Related Spectral Signatures
- 面试题10-二进制中1的个数
- Python转义字符
- 爬虫清洗:python strip()函数 去空格\n\r\t函数的用法
- C语言——函数的一些基本概念
- 蜜蜂路线图c语言思路,打蜜蜂(c语言)(Hit the bee (C language)).doc
- 博升机器人_乐博乐博机器人
- 职称计算机考试输入破折号,2015职称计算机考试Dreamweaver考前测试题及答案
- 后台用户角色权限管理设计
- 数字电位器IC市场现状研究分析与发展前景预测报告
- sd和sem啥区别_标准差和标准误的选择 (SD) 和 (SEM)
- 国产BI工具大比拼,帆软Fine BI和观远BI到底该怎么选型?