Python:异步编程
#初学者 #编程 #python #asyncio

上次,我们看到您可以利用ThreadPool进行多处理:

您也可能会喜欢方便的async/await语法,以异步执行任务,这正是asyncio所做的。

异步IO?

Asyncio允许编写并发代码。

您经常会在专业用法中看到它。

但是,您可能不知道异步IO 在一个过程中使用单个线程。

这是 违反直觉,您可能会发现许多“并发代码”的用法,但是任务并非固有地并发。

这是另一种与穿线或多处理不同的方法,设计

异步编程并不容易

不好的做法是将async/await用于任何事物。

对我来说,您应该更多地关注异步与同步代码,而不是“并发”。

使用async/async with,您将操纵Coroutines并使用await暂停执行,直到您得到您正在等待的东西。

这几乎是“ Coroutine”的含义:可以暂停其对其他操作执行的函数。

要定义coroutine,只需使用async

import asyncio

async def test():
    print("test")

if __name__ == '__main__':
    asyncio.run(test())

要暂停执行,请使用await

import asyncio

async def test():
    await asyncio.sleep(7)
    return "test"

async def main():
    t = await test()
    print(t)

if __name__ == '__main__':
    asyncio.run(main())

您可以将await视为断点。

利弊

根据我的经验,异步IO的好处可能是多个:

  • 非阻止电话,尤其是使用HTTP请求
  • 优化的CPU用法
  • 等待对象
  • 能够连接Coroutines的能力

但是,有一些缺点:

  • 很难调试
  • 很容易滥用它(例如,使用异步以及阻塞呼叫)