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
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    python运行指定几行

    Python是一种高级编程语言,可以用于开发各种类型的应用程序,包括网站、桌面应用程序、数据分析和人工智能等。在Python中运行指定的几行代码十分简单,它不仅能够帮助程序员快速开发软件,也适用于
    的头像 发表于 11-29 15:04 372次阅读

    python安装后idle在哪儿

    Python 是一种非常流行的编程语言,它使用简单且易于理解的语法,使得它成为初学者和专业开发人员的首选。Python 的安装非常简单,您只需在官方网站上下载适合您操作系统的安装包,然
    的头像 发表于 11-29 14:52 482次阅读

    python自带的idle怎么进入

    Python自带的IDLE是一个集成开发环境(Integrated Development Environment),它通过提供编辑器和交互式解释器,使得Python的开发变得更加简单和便捷。本文
    的头像 发表于 11-29 14:51 937次阅读

    python shell怎么用

    Python Shell是一种交互式解释器,可以通过命令行直接运行Python代码。在Shell中,可以输入一行代码并立即得到结果,非常适合于测试、尝试新代码或进行简单的任务。本文将详细介绍
    的头像 发表于 11-29 14:36 369次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释器,它可以将您的代码翻
    的头像 发表于 11-28 16:02 533次阅读

    运行Python程序的几种常见方法

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了一个Python程序之后,你需要运行它以检查程序是否按照预期工作。下面是运行Python程序的几种常见
    的头像 发表于 11-28 15:32 470次阅读

    如何运行Python程序

    运行Python程序非常简单Python是一种解释型语言,这意味着可以直接通过解释器来执行代码。下面我将详细介绍如何运行Python程序。 一、安装
    的头像 发表于 11-24 09:31 701次阅读

    python的run在哪

    : $ python my_program.py 这种方式适用于简单Python程序,执行过程直接在命令行中显示。这种运行
    的头像 发表于 11-24 09:27 890次阅读

    Python2与Python3的差异

    Python2与Python3是两个不同的版本,它们在语法、功能和性能等方面存在一些差异。下面是对Python2和Python3的详尽、详实、细致的比较,分为以下几个方面: 语法差异
    的头像 发表于 11-23 16:48 348次阅读

    python写完程序之后怎么运行

    Python程序的执行流程有更深入的了解。 一、Python程序的基本结构 Python程序是由一系列的语句构成,语句是指一行代码或多行代码组成的指令集合。一个Python程序以文件
    的头像 发表于 11-22 11:10 649次阅读

    python怎样运行代码

    Python是一种广泛使用的编程语言,用于开发各种类型的应用程序。它具有简单易学的语法和强大的功能,可以用于编写简单的脚本、开发桌面应用、构建Web应用、进行科学计算等多种用途。在本文中,我们将详细
    的头像 发表于 11-22 10:31 638次阅读

    python简单for循环例子

    Python是一种简单而又强大的编程语言,通过其清晰的语法和丰富的功能库,我们可以实现各种各样的任务。其中一个最基本的语法结构就是for循环,让我们来看一下如何使用for循环来编写一个最简单的例子
    的头像 发表于 11-21 14:53 491次阅读

    什么是事件循环

    PythonAsyncio模块提供了管理事件、协程、任务和线程的方法,以及编写并发代码的原语。此模块的主要组件和概念包括: 事件循环 : 在Asyncio模块中,每一个进程都有一个事件循环
    的头像 发表于 11-01 10:00 317次阅读
    什么是事件循环

    Python程之SQLITE-DTU701 辉为科技

    () 【5】勿忘关闭操作conn.close() •# pythondb-insert-temp.py & 【简单说明】 python db-insert-temp.py &
    发表于 06-01 19:48

    Python写机器人上位机

    工具,Python使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python的安装包中、只要安装好 Python之后就能 import Tkinter 库、而且 IDLE也是用 Tkin
    发表于 05-09 11:10 0次下载
    <b class='flag-5'>Python</b>写机器人上位机