没有合适的资源?快使用搜索试试~ 我知道了~
Python并发concurrent.futures和asyncio实例
0 下载量 50 浏览量
2020-12-20
18:46:52
上传
评论 1
收藏 81KB PDF 举报
温馨提示
试读
4页
说明 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码。 从Python3.2开始,标准库为我们提供了concurrent.futures模块,concurrent.futures 模块的主要特色是 ThreadPoolExecutor 和 ProcessPoolExecutor 类,这两个类实现的接口能分别在不同的线程或进程中执行可调 用的对象。这两个类在内部维护着一个工作线程或进程池,以及要执行的任务队列。 Python 3.4 以后标准库中asyncio 包,这个包使用事件循环驱动的协程实现并发。这是 Python 中最大也
资源详情
资源评论
资源推荐
Python并发并发concurrent.futures和和asyncio实例实例
说明说明
Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码。
从Python3.2开始,标准库为我们提供了concurrent.futures模块,concurrent.futures 模块的主要特色是 ThreadPoolExecutor
和
ProcessPoolExecutor 类,这两个类实现的接口能分别在不同的线程或进程中执行可调
用的对象。这两个类在内部维护着一个工作线程或进程池,以及要执行的任务队列。
Python 3.4 以后标准库中asyncio 包,这个包使用事件循环驱动的协程实现并发。这是 Python 中最大也
是最具雄心壮志的库之一。asyncio 大量使用 yield from 表达式,因此与
Python 旧版不兼容。
submit和和map方法方法
submit方法作用是向线程池提交可回调的task,并返回一个回调实例。
example:
import time
from concurrent.futures import ThreadPoolExecutor
# 可回调的task
def pub_task(msg):
time.sleep(3)
return msg
# 创建一个线程池
pool = ThreadPoolExecutor(max_workers=3)
# 往线程池加入2个task
task1 = pool.submit(pub_task, 'a')
task2 = pool.submit(pub_task, 'b')
print(task1.done()) # False
time.sleep(4)
print(task2.done()) # True
print(task1.result())
print(task2.result())
map方法是创建一个迭代器,回调的结果有序放在迭代器中。
问题:问题:
Executor.map 函数易于使用,不过有个特性可能有用,也可能没用,具体情况取决于需求:这个函数返回结果的顺序与调用
开始的顺序一致。
如果第一个调用生成结果用时 10秒,而其他调用只用 1 秒,代码会阻塞 10 秒,获取 map 方法返回的生成器产出的第一个结
果。
在此之后,获取后续结果时不会阻塞,因为后续的调用已经结束。
如果必须等到获取所有结果后再处理,这种行为没问题;不过,通常更可取的方式是,不管提交的顺序,只要有结果就获取。
为此,要把 Executor.submit 方法和 futures.as_completed 函数结合起来使用。
from concurrent.futures import ThreadPoolExecutor
import requests
URLS = ['http://www.csdn.com', 'http://qq.com', 'http://www.leasonlove.cn']
def task(url, timeout=10):
return requests.get(url, timeout=timeout)
weixin_38604395
- 粉丝: 3
- 资源: 910
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 王姿.html
- 51单片机学习(1)-软件keil下载
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0