0571杭州新闻:python 异步 I/O

admin 5个月前 (04-23) 科技 36 0

若是你想领会异步编程,那么必然会涉及出许多相关观点。

  • 堵塞/非堵塞
  • 同步/异步
  • 多历程/多线程/协程

为什么我要学习这个话,由于我想搞懂异步框架和异步接口的挪用。以是,我的学习门路是这样的:

1.python异步编程
2.python Web异步框架(tornado/sanic)
3.异步接口挪用(aiohttp/httpx)

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

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(), "竣事.")

运行效果:

Thu Apr 16 00:08:22 2020 最先逛街
女朋友看衣服..
...出来了
体验手机..
...出来了
Thu Apr 16 00:08:35 2020 竣事.

假设单元是分钟,你们总共耗时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(), "竣事.")


asyncio.run(main())

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

  • async 声明一个函数为异步函数。
  • await 声明处置对照耗费时的动作。
  • asyncio.run() 函数用来运行最高层级的入口点 main() 函数。
  • asyncio.create_task() 函数用来并发运行作为 asyncio 义务 的多个协程。

实在,思绪异常简朴,就是你和女朋友各逛各自的,先出来的等等对方。

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

来看看运行效果:

Thu Apr 16 00:19:19 2020 最先逛街
女朋友看衣服..
体验手机..
...出来了
...出来了
Thu Apr 16 00:19:27 2020 竣事.

假设单元是分钟,只需要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://docs.python.org/zh-cn/3/library/asyncio.html

,

皇冠代理APP

皇冠体育APP是一个开放皇冠代理APP下载、皇冠会员APP下载、皇冠线路APP下载、皇冠登录APP下载的平台,皇冠体育APP上最新登录线路、新2皇冠网址更新最快,皇冠体育APP开放皇冠会员注册、皇冠代理开户等业务。

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:0571杭州新闻:python 异步 I/O

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:548
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1031
  • 评论总数:156
  • 浏览总数:4014