concurrent.futures用法

2023-11-10 05:18
文章标签 用法 futures concurrent

本文主要是介绍concurrent.futures用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

submit 异步提交
map(func, *iterables, timeout=None, chunksize=1) 
类似  map(func, *iterables)除了以下:
迭代器是立即收集的而不是延迟收集的
func是异步执行的和对func的多个调用可以并发执行
shutdown(wait=True) 
相当于进程池的pool.close()+pool.join()操作
wait=True,等待池内所有任务执行完毕回收完资源后才继续
wait=False,立即返回,并不会等待池内的任务执行完毕
但不管wait参数为何值,整个程序都会等到所有任务执行完毕
submit和map必须在shutdown之前
result(timeout=None) 取得结果,如果在for中引用将会形成阻塞
add_done_callback(fn) 回调函数,异步执行
submit 使用和验证异步运行:
import time
import os
import threading
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def func():
time.sleep(2)
print('11',threading.current_thread().getName())
if __name__ == '__main__':
tpool = ThreadPoolExecutor(max_workers=2) #max_workers指定多少个线程
# tpool = ProcessPoolExecutor(max_workers=5) #进程池的使用只需要将上面的ThreadPoolExecutor改为ProcessPoolExecutor就行了,其他都不用改
start = time.time()
for i in range(2):
tpool.submit(func)
tpool.shutdown() #加了shutdown等close()加join(),锁pool并等子线程结束才主线程才结束
end = time.time() - start
print(end)
结果:
11 ThreadPoolExecutor-0_0
11 ThreadPoolExecutor-0_1
2.001002073287964
func()设定了休眠两秒,这时设置进程池,并用submit()功能运行,发现运行两次func()的时间是两秒,所以得出submit是异步运行结果
map的使用
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import threading
import os,time,random
def task(n):
print('%s is runing' %threading.get_ident())
time.sleep(random.randint(1,3))
return n**2
if __name__ == '__main__':
executor=ThreadPoolExecutor(max_workers=3)
# for i in range(11):
#     future=executor.submit(task,i)
s = executor.map(task,range(1,5)) #map取代了for+submit,将1,2,3,4的值传入task进行异步执行
print([i for i in s])
结果:
123145491988480 is runing
123145497243648 is runing
123145502498816 is runing
123145497243648 is runing
[1, 4, 9, 16]
回调函数(add_done_callback):
import time
import os
import threading
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def func(n):
time.sleep(2)
return n*n
def call_back(m):
print('结果为:%s'%(m.result()))
tpool = ThreadPoolExecutor(max_workers=5)
t_lst = []
for i in range(5):
t = tpool.submit(func,i).add_done_callback(call_back) #将tpool.submit(func,i)的返回值给函数call_back异步执行
结果:
结果为:0
结果为:9
结果为:4
结果为:1
结果为:16
for中result引发阻塞
import time
from concurrent.futures import ThreadPoolExecutor
def func(n):
time.sleep(2)
return n*n
tpool = ThreadPoolExecutor(max_workers=5)
t_lst = []
start = time.time()
for i in range(5):
t = tpool.submit(func,i)
print(t.result())
end = time.time() - start
print("时间:%f"%end)
结果:
0
1
4
9
16
时间:10.023604

转载于:https://www.cnblogs.com/BALCKLIGHTNING/p/10067598.html

这篇关于concurrent.futures用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380559

相关文章

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.