语法:
- 用@asyncio.coroutine 装饰方法
- 用asyncio.sleep()做等待
- 以asyncio.CancelledError来获取.cancel事件
- 用yield from来等待异步任务
- 用asyncio.async排定协程,立即返回task对象。
- 用asyncio.get_event_loop().run_until_complete(xx())来等待处理完成。
线程与协程对比
- Task与Future类似
- Task用于驱动协程,Thread用于调用callable对象
- Task不由自己手动实例化,而是传给asyncio.async(..)或loop.create_task(..)获取
- Task排定了运行时间,Thread需要调用start方法明确运行
- 线程不可通过外部的API终止,协程可以通过yield捕获到终止异常
- 线程需要加锁,防止数据处于无效状态。协程无需保留锁,自身会同步协作