0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python协程之asyncio简单使用

冬至配饺子 来源:缪斯之子 作者:肖新苗 2022-08-29 17:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录

简单的使用

相同和同步的对比

顺下载的例子

1.简单的使用

import asyncio

async def req1():
await asyncio.sleep(1)
print('执行 req1')
return 1


async def req2():
print('执行 req2')
return 2


async def main():
list = [req1(), req2()]
res = await asyncio.gather(*list)
'''
虽然,req2是先执行完的,
但是res返回值的顺序, 还是跟list顺序保持一致
'''
print(res)


asyncio.get_event_loop().run_until_complete(main())
'''
结果:
执行 req2
执行 req1
[1, 2]
'''

2.相似和同时的对比

测试2个请求,同时触发请求执行的时间短,我是延迟让请求延迟返回

import asyncio
import time

import requests
from aiohttp import ClientSession


async def fetch(session, param):
async with session.get as resp:
data = await resp.json()
return data


async def req_async():
async with ClientSession() as session:
return await asyncio.gather(fetch(session, 2), \
fetch(session, 1))


def req():
session = requests.Session()
p1, p2 = 2, 1
return [
session.get.json(),
session.get.json()
]


async def main():
s1 = time.time()
v1 = await req_async()
s2 = time.time()
v2 = req()
print(f'异步请求时间:{round(s2-s1,1)}s \
响应结果:{[v["args"]["a"] for v in v1]}')
print(f'同步请求时间:{round(time.time()-s2,1)}s \
响应结果:{[v["args"]["a"] for v in v2]}')


if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
'''
结果:
异步请求时间:3.2s 响应结果:['2', '1']
同步请求时间:7.9s 响应结果:['2', '1']
'''


3.相关下载的例子

看似请求、极大的文件限制、意外保存

async def download(sem, page: int, folder: str, session: ClientSession):
async with sem:
async with session.get(url, params={'page': page}) as resp:
async with aiofiles.open(f'{folder}/{page}.json', mode='w') as f:
await f.write(await resp.text())
return page


async def main():
# 请求url参数列表
url_pages = range(1, 5)
# 创建文件夹data
folder_name = 'data'
if not os.path.exists(folder_name):
os.makedirs(folder_name)
# 限制并发数量
sem = asyncio.Semaphore(50)
# 异步请求,并保存到文件
async with ClientSession(connector=TCPConnector(limit=5),
timeout=ClientTimeout(300)) as session:
tasks = []
for page in url_pages:
tasks.append(download(sem, page, folder_name, session))
result = await asyncio.gather(*tasks)
exp = set(url_pages)
act = set(result)
if exp == act:
print(f'全部下载完成')
else:
print(f'未成功:{exp - act},成功:{exp & act}')


if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90314
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 232次阅读
    使用<b class='flag-5'>Python</b>/MyHDL创建自定义FPGA IP

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    Fusion的简单方法。在本示例中,我们将演示如何使用Python脚本运行光学仿真,以向用户简要概述这种跨平台的仿真能力。 用例概览 文件路径 用户可以在样本文件的文件夹中找到所有文件。包含这些文件
    发表于 03-31 09:39

    解析Linux的进程、线程和协程

    )轻量级:相对于进程,线程的创建和切换开销较小。 (3)同步与通信:线程之间需要通过同步机制(如互斥锁、信号量)来保证数据的一致性。 程(Coroutine) 程是一种轻量级的用户态线程,它们
    发表于 12-22 11:00

    没有专利的opencv-python 版本

    4.8.x 及以上核心版(无专利、安装简单、功能全); 若需扩展功能,搭配 opencv-contrib-python-headless(无头版),避免引入专利模块; 无需担心“专利绕过”,官方核心版本身无
    发表于 12-13 12:37

    NICE处理器接口信号解读--以demo为例

    的复位信号。 nice_active表示nice处理器是否正在工作,但该信号在上层文件中未例化,如下图所示。 nice_mem_holdup信号在e203_lsu_ctrl.v文件中用于覆盖cpu
    发表于 10-31 08:01

    利用Verdi调试处理器的实现步骤

    本次给大家介绍的是利用Verdi调试处理器的实现步骤。 有时为了观察处理器运行情况,需要查看处理器接口的信号波形,此时可以用Verdi来查看主处理器发给处理器的自定义指令以进一
    发表于 10-30 08:26

    MD5信息摘要算法实现二(基于蜂鸟E203处理器)

    本设计首先根据MD5处理器的功能设计MD5算法IP核,软件部分使用串口程序助手进行64位加解密结果的输出,E203内核根据地址取出对应的数据,使用相关的指令进行传输显示。通过NICE接口将MD5
    发表于 10-30 07:54

    NICE处理器demo分析及测试

    实现思路: 1.硬件设计,编写相应的verilog文件,需要注意的是NICE处理器定义了一些基本的接口; 2.编写驱动,通过内联汇编的伪指令.insn配置相关的驱动设置; 3.编写用于测试
    发表于 10-23 07:05

    基于E203 NICE处理器扩展指令

    )和rd(读)传递,不需要读取存储器的数据(这样可精简化处理器的控制代码) 在官方案例的基础上 新增一个简单的add指令 c= a + b(主要是将内联汇编弄清楚,使用rs2)
    发表于 10-21 14:35

    基于E203 NICE处理器扩展指令2.0

    实现功能:基于官方提供的demo nice的硬件代码,设计一个基于e203 nice处理的加法器。 NICE处理器理论学习 nice处理器的作用主要是用于控制通路的管理 去年国一的
    发表于 10-21 10:39

    termux调试python猜数字游戏

    用termux做一个猜数字游戏 下面是在Termux中创建猜数字游戏的步骤及完整实现方案,结合Python实现(最适配Termux环境): ? 一、环境准备(Termux基础配置) 1.
    发表于 08-29 17:15

    termux如何搭建python游戏

    termux如何搭建python游戏 Termux搭建Python游戏开发环境的完整指南 一、Termux基础环境准备 Termux是一款无需root即可在安卓设备上运行的Linux终端
    发表于 08-29 07:06

    【HZ-T536开发板免费体验】4、使用蓝牙模块读取小米温湿度计的数据

    upgrade bluez 安装好工具后,可以先使用工具简单的测试下,例如扫描设备什么的。这里我们就跳过了。 然后,我们需要创建一个虚拟环境,好安装脚本需要的依赖,这里我们考虑使用Python脚本来抓取ble
    发表于 08-25 22:16

    请问NICE处理器与传统ocb外设相比的优势有什么?

    使用扩展指令调用NICE处理器完成预定操作,给出的优势通常为代替CPU处理数据,但其实使用片上总线挂一个外设,然后驱动外设完成操作也可以实现相同的功能,所以想问一下处理器相比于外设实现还有没有其它方面的优势
    发表于 05-29 08:21

    NICE处理器与传统ocb外设相比的优势有什么?

    使用扩展指令调用NICE处理器完成预定操作,给出的优势通常为代替CPU处理数据,但其实使用片上总线挂一个外设,然后驱动外设完成操作也可以实现相同的功能,所以想问一下处理器相比于外设实现还有没有其它方面的优势
    发表于 05-28 08:31