用asyncio处理并发

语法:

  • 用@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捕获到终止异常
  • 线程需要加锁,防止数据处于无效状态。协程无需保留锁,自身会同步协作

你可能感兴趣的:(用asyncio处理并发)