栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

两个问题搞懂,python异步IO

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两个问题搞懂,python异步IO

本文总结;
1.为什么学异步IO
2.如何写代码
如果你想了解异步编程,那么必然会涉及出许多相关概念。

堵塞/非堵塞同步/异步多进程/多线程/协程 为什么学异步IO

那么异步编程有什么好处?在某些场景下它可以提高性能。我们知道CPU的速度快于磁盘、网络等IO。一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能进行下一步操作。这种情况称为同步IO。我们可以使用多线程来解决这类问题,另一种方式是通过异步。

那么这个对我的毕设应该是有作用!
一个账号池,单个账号获取一个id之后,返回一个heic格式图片,使用异步,不用等待第一个结果返回再开始下一个账号请求。而是可以在第一个账号进行转换过程中,就开始下一个账号的使用

如何使用python asyncio

python在3.4版本引入asyncio,到 3.5版本又加入async/await来简化异步的使用。

先来举个简单的例子,假如,你和女朋友逛街。你的目的是去看新上市的华为P40手机,而你女朋友是去看新款的衣服。你们的逛街流程是这样的。

import time


def clothes_shop():
    print("女朋友看衣服..")
    time.sleep(8)
    print("...出来了")


def huawei_shop():
    print("体验手机..")
    time.sleep(5)
    print("...出来了")

print(time.ctime(), "开始逛街")
clothes_shop()
huawei_shop()
print(time.ctime(), "结束.")
Sun Feb 13 13:20:47 2022 开始逛街
女朋友看衣服..
...出来了
体验手机..
...出来了
Sun Feb 13 13:21:00 2022 结束.

假设单位是分钟,你们总共耗时13分钟。

接下来,看看用异步是如何处理的:

import asyncio
import time


async def shop(delay, what):
    print(what)
    await asyncio.sleep(delay)
    print("...出来了")


async def main():
    task1 = asyncio.create_task(shop(8, '女朋友看衣服..'))
    task2 = asyncio.create_task(shop(5, '体验手机..'))

    print(time.ctime(), "开始逛街")
    await task1
    await task2
    print(time.ctime(), "结束.")

通过 async/await 语法进行声明,是编写 asyncio 应用的推荐方式。

async 声明一个函数为异步函数。
await 声明处理比较耗费时的动作。
asyncio.run() 函数用来运行最高层级的入口点 main() 函数。
asyncio.create_task() 函数用来并发运行作为 asyncio 任务 的多个协程。
其实,思路非常简单,就是你和女朋友各逛各自的,先出来的等等对方。

严重警告!提醒广大直男,现实生活中千万不要这么思考问题。一定要陪女朋友一起看衣服,还要主动去付钱。

来看看运行结果:

Sun Feb 13 13:32:33 2022 开始逛街
女朋友看衣服..
体验手机..
...出来了
...出来了
Sun Feb 13 13:32:41 2022 结束.

假设单位是分钟,只需要8分钟搞定。

通过上面的例子,可以看到 task1、task2仍然有前后顺序,这种前后顺序的时间可以忽略不计。但是,我们也是可以使用asyncio.gather()方法并发运行任务。

#……

async def main():
    print(time.ctime(), "开始逛街")
    await asyncio.gather(
        shop(8, '女朋友看衣服..'),
        shop(5, '体验手机..')
    )
    print(time.ctime(), "结束.")

asyncio.run(main())

运行结果同上,这里就不再贴了
参考:https://www.cnblogs.com/fnng/p/12757395.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号