asyncio
作用
- 提供了对携程的支持
- 非阻塞: 协程允许在等待异步操作的同时执行其他任务,而不会阻塞整个程序。
- 轻量: 相对于线程和进程,协程的开销较小,因为它们在单线程中执行。
- 使用
async/await
语法: async def
声明协程函数,await
用于等待异步操作的完成。
- 事件循环: 协程需要在事件循环中运行,asyncio模块提供了事件循环的支持。
协程和线程(可以理解为一个是用户级,一个是系统级)
- 携程
- 在携程中,程序员编写的代码负责主动让出CPU的控制权。
- 属于轻量级的线程
- 线程
- 操作系统控制CPU的控制权(单核CPU执行多个进程就是这样的)
携程的定义和使用
自动获取当前线程的event_loop
# 定义携程
async def show_msg() -> None:
print('show')
await asyncio.sleep(0.8)
print('msg')
# 使用协程
if __name__ == "__main__":
# asyncio.run() 本身是同步的
asyncio.run(show_msg())
手动获取当前的 event_loop
import asyncio
async def main():
# 获取当前'线程'事件循环
loop = asyncio.get_event_loop()
# 将任务丢进事件循环里面
task = loop.create_task(show_msg())
# 阻塞当前携程等待任务完成
await task
# 运行主协程
asyncio.run(main())