Python 的协程其实你很早就开始用了。就是以前的 yield. 后来在 python 3.5 这个版本里面,把 yield 改个名字叫 await,就发布了 python 的协程。当然实际上是 yield from,但是也差不多。真是改个名字,整个代码量我记得不超过 100 行。
协程说破天了就是让两个函数来回跳着执行。可以用 yield/await,也可以用汇编指令的 jmp 来回跳。
但为啥你不理解现在这些呢。因为协程存在这么多年了一直没啥用。
协程还必须和事件循环配合,才能用于异步 IO. 异步框架定义了一个事件循环协程,当程序员写的协程碰到 IO 事件时就跳到事件循环协程里面,事件发生后,再跳回程序员的协程继续读写。
这就是为什么你写了一大堆 async/await 不能直接用。必须在程序员的最顶层,再启动事件循环协程。
asyncio.run() 干的事情就是启动一个额外的事件循环协程,等待你的协程结束,然后关闭事件循环协程。
【 在 JulyClyde 的大作中提到: 】
: 用async def定义了一个函数,它返回一个coroutine
: 想调用它,正常情况下需要用await关键字
: 但是await关键字本身必须用在async定义的函数内
: ...................
--
FROM 59.61.197.*