![821346a5bdb4054c38de162992936d24.png](https://img-blog.csdnimg.cn/img_convert/821346a5bdb4054c38de162992936d24.png)
提前提醒一句,这篇文章可能是 asyncio 最简单的使用方法,但不一定是最正确的使用方法。如果想系统地学习 Python 中的异步操作,请移步其他文章。
此文章适用于 Python 3.7。
1、使用 async
关键字创建一个协程
async def coro1():
print('coro1')
return 'Hello World!'
2、在协程中通过 await
调用其他协程
async def coro2():
print('coro2')
# 协程在调用之后不会立即执行,而是返回一个 coroutine
# 比如 s = coro1() 这种代码是不能得到结果的
# 只有在 await 之后才会执行
s = await coro1()
print(s)
3、使用 asyncio.create_task
来“并行”执行协程
async def coro3():
print('coro3')
# coroutine 可以传给 asyncio.create_task,得到一个可以“并行”的 coroutine
task1 = asyncio.create_task(coro1())
task2 = asyncio.create_task(coro2())
await task1
await task2
# 虽然是依次 await,但是会“同时”执行
4、使用 asyncio.run
来运行一个协程
async def main():
await coro3()
if __name__ == '__main__':
asyncio.run(main())
5、在任何等待操作之前使用 await asyncio.sleep(0)
来让出控制流
import multiprocessing # 这里仅用多进程做示例,
async def coro4():
print('coro4')
process = MyProcess() # MyProcess 是一个执行复杂任务的进程
process.start()
await asycio.sleep(0) # 这里让出控制流,其他协程会先执行,然后再回到这个协程
process.join() # 当我们开始等待子进程执行完成的时候,其他协程的工作已经做完了
6、如果正在用的一个库不支持协程,不妨去 PyPI 上找找有没有 aio 开头的库
# 没有示例代码,这一条请自行体会。
7、参照本文时遇到了困难,请去查阅其他更为专业的文章
# 在开头我就说过,这篇文章不一定是最正确的使用方法。
以上。