用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捕获到终止异常
  • 线程需要加锁,防止数据处于无效状态。协程无需保留锁,自身会同步协作
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容