python进程之进程池、线程池与异步回调机制
进程线程不可以无限制的创建,因为有硬件的限制。为了避免资源被程序消耗过度,可以使用进程池或线程池的技术。
池
降低程序的执行效率,但是保证了计算机硬件的安全
进程池
提前创建好固定数量的进程,供后续程序的调用,超出则进入等待状态
线程池
提前创建好固定数据的线程,供后续程序的调用,超出则进入等待状态
PS:
当一个程序计算数量的程序较多时,使用进程池。
当一个程序I/O的程序较多时,使用线程池。
(因为GIL锁的原因,每个进程中同一时间只能有一个进程链接cpu)
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import os
import time
import random
# 1. 产生含有固定数量线程的线程池
# t_pool = ThreadPoolExecutor() # 默认线程数(max_workers = min(32, (os.cpu_count() or 1) + 4))
t_pool = ThreadPoolExecutor(20) # 产生有20个线程的线程池
p_pool = ProcessPoolExecutor(5)
def task():
print('task is running')
time.sleep(random.randint(1, 3))
print('task is over')
return 'task函数返回值'
def func(a):
print(f'我拿到返回值了>>>:{a.result()}')
# 2.将任务提交给线程池
for i in range(200): # 定义200个任务
t_pool.submit(task) # 将任务交给线程池
# 3. 将任务提交给进程池
# 执行过程中,可以按到程序是一波一波的运行,每一波就是你定义进程的数量
if __name__ == '__main__':
for i in range(20):
p_pool.submit(task)
# 4.要获得函数运行结果的返回值
if __name__ == '__main__':
for i in range(20):
# 将task函数返回值传给func函数,func函数拿到返回值可以去干别的事去了
p_pool.submit(task).add_done_callback(func) # 异步回调机制
python进程之进程池、线程池与异步回调机制的更多相关文章
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- python并发编程-进程池线程池-协程-I/O模型-04
目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...
- Python并发编程05 /死锁现象、递归锁、信号量、GIL锁、计算密集型/IO密集型效率验证、进程池/线程池
Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密集型效率验证.进程池/线程池 目录 Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密 ...
- Python标准模块--concurrent.futures 进程池线程池终极用法
concurrent.futures 这个模块是异步调用的机制concurrent.futures 提交任务都是用submitfor + submit 多个任务的提交shutdown 是等效于Pool ...
- concurrent.futures模块(进程池/线程池)
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- Python-GIL 进程池 线程池
5.GIL vs 互斥锁(*****) 1.什么是GIL(Global Interpreter Lock) GIL是全局解释器锁,是加到解释器身上的,保护的就是解释器级别的数据 (比如垃圾回收的数据) ...
- 13 并发编程-(线程)-异步调用与回调机制&进程池线程池小练习
#提交任务的两种方式 #1.同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果,再执行下一行代码,导致程序是串行执行 一.提交任务的两种方式 1.同步调用:提交任务后,就在原地等待任务完毕,拿 ...
- 线程queue、线程进程池、异步回调机制
1. 线程 queue queue is especially useful in threaded programming when information must be exchanged sa ...
- (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块
一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...
- 并发编程---线程queue---进程池线程池---异部调用(回调机制)
线程 队列:先进先出 堆栈:后进先出 优先级:数字越小优先级越大,越先输出 import queue q = queue.Queue(3) # 先进先出-->队列 q.put('first') ...
随机推荐
- formidable处理文件上传的细节
koa在请求体的处理方面依赖于通用插件koa-bodyparser或者koa-body,前者比较小巧,内部使用了co-body库,可以处理一般的x-www-form-urlencoded格式的请求,但 ...
- Linux使用NAT/VMnet8(NAT)模式配置网卡ping通外网/主机/百度
vmnat 配置好后无法ping通打开共享 vmnet8 nat网卡配置 主机网卡配置 去掉网关
- C 语言 数制
C 语言 数制 数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法.计算机处理的信息必须转换成二进制形式数据后才能进行存储和传输.计算机中,经常使用的进制有二进制.八进制.十进制.十六进 ...
- Matlab|fastica遇到的问题
fastica 1 安装 FastICA 在matlab代码实现以及运行结果by阳光idol 安装步骤博主阳光idol已经写的很清楚了 FastICA 在matlab代码实现.运行结果及错误调试方法 ...
- python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
@ 目录 一.准备工作 1.PyQt5 2.qtawesome 二.预览 1.启动 2.歌曲搜索 3.歌曲播放 4.评论查看 5.自定义背景 6.设置-基本设置 7.设置-高级设置 8.定时任务 三. ...
- k8s重启应用
[root@k8s-master01 opt_k8s]# cat app_list xxx-supervise-srv xxx-recon-srv xxx-mkt-strategy-srv xxx-u ...
- Nginx版本。
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- python学习记录(四)-意想不到
计数 from collections import Counter # 计数 res = Counter(['a','b','a','c','a','b']) print(res,type(res) ...
- 智汇成城 ,创赢未来 | AI+产业峰会智慧城市专场在深成功举办!
11月4日下午,由福田区人才工作局指导,广州英码信息科技有限公司和共达地创新技术(深圳)有限公司联合主办,深圳市人工智能行业协会承办的AI+产业峰会之智慧城市专场活动在深圳市南山区成功举办. &quo ...
- redis 访问 database
edis的数据库个数是可以配置的,默认为16个,见redis.windows.conf/redis.conf的databases 16.对应数据库的索引值为0 - (databases -1),即16 ...