刷了一遍3.8文档中asyncio的部分, 总结一些基本的知识点, python后续版本中, 这个模块更新目测也会比较频繁, 虽然到3.6为止, 这个模块还不是很好用, 但从目前来看, python最新版本更新的asycnio模块已经越来越趋于稳定了.
3.8版本中有一部分的api已经宣布不推荐使用, 并会在python3.10版本中弃用, 本文章中已过滤掉将会弃用的函数,并在文章最后简要概括.
本文内容基于python3.8官方文档编写, 很多内容与python3.8官方文档相同, 英语较好的童鞋请直接阅读官方文档:
ok~ 开始扯皮~
先解释一下高级函数和低级函数:
越高级的函数封装的越完整, 越有可能被用户使用.
越低级的函数, 则越接触底层, 越有可能用户基本用不到.
1.1 协程
使用async/await语法声明的协程是编写异步应用程序的首选. 例如, 以下代码段(需要python3.7+)打印"hello", 等待1秒钟, 然后打印"hello"
>>> import asyncio
>>> async def main():...
print('hello')...
await asyncio.sleep(1)...
print('world')
>>> asyncio.run(main())
hello
world
复制代码
请注意,仅调用协程不会调度它的执行:
>>> main()
为了实际运行协程,asyncio提供了三种主要机制:
使用asyncio.run()函数来运行顶层入口函数"main"(请参照上面的例子)
等待协程. 下面的代码片段将在等待1秒钟后显示“ hello”,然后在等待另外 2秒钟后显示“ world” :
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
print(f"started at {time.strftime('%X')}")
await say_after(1, 'hello')
await say_after(2, 'world')
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
复制代码
预期的输出:
started at 17:13:52
hello world
finished at 17:13:55
复制代码asyncio.create_task()