Python中协作式多任务编程主要使用asyncio模块。asyncio模块提供了一个事件循环,我们可以将异步任务注册到事件循环上,让它管理任务的执行。
asyncio有以下主要COMPONENT:
1. Coroutines:
- 协程是异步任务的主要形式,定义使用async def关键字。
- 协程会暂停和恢复自身的执行。
例如:
async def coro1():
print('coro1 start')
await asyncio.sleep(1)
print('coro1 end')
2. Tasks:
- Task封装一个协程并调度其执行。
- 可以使用asyncio.create_task()或协程的ensure_future()方法创建Task。
例如:
async def main():
task1 = asyncio.create_task(coro1())
...
3. Event Loop:
- Event Loop负责调度注册的任务,启动和结束任务。
- 我们可以使用asyncio.get_event_loop()获取事件循环。
例如:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
4. Futures:
- Future表示一个异步任务的最终结果。
- 我们可以使用协程的return statement或者任务的result()方法获取Future的结果。
例如:
async def coro():
return 1
async def main():
result = await coro() # 获取协程的Future
所以,asyncio模块可以实现python的协作式多任务编程,主要通过事件循环来调度注册的异步任务。需要注意:
- asyncio使用单线程,需要避免通过同步方式阻塞事件循环。
- 可以使用多进程或线程来发挥多核CPU性能。
- asyncio适用于I/O密集型任务,计算密集型任务比较适合多进程。