网站地图 联系我们

学习python首选-实战python学习班,专注于python高级工程师培养,python课程:包括Python核心编程技术、全栈开发、网络爬虫、人工智能等。python全栈工程师+提高工作经验,获取免费试听课程!
当前位置: python培训 > python学习 > 常见问题 > 正文

tornado调用一系列阻塞的方法时候如何保持异步的效果呢?

来源:肚皮舞 浏览量: 发布日期:20-08-27 11:01:59 调整字体大小【 【所属栏目:常见问题】

  用tornado开发restful服务,需要调用已有的诸多函数。怎样保持tornado的异步方式,是否需要对现有函数做修改?

  一般情况下,只会对原有函数中操作耗时的处理进行异步装饰,例如网络请求

  from tornado.gen import coroutine, Future, Return

  @coroutine # 首先是协程装饰器

  def http_request(url):

  response = yield get_url(url) # yield 调用

  ...

  需要注意的是,一旦使用异步,那调用到的函数返回值必须是Future类型或者使用croutine和Return()返回。

  例如上面用到的get_url方法,要用以下的方式返回结果

  def get_url(url):

  future = Future()

  ...

  return future

  @coroutine

  def get_url(url):

  ...

  raise Return(result) # 这里的result是获取到的结果

  异步虽然好用,但是缺点就是一旦用了,调用的时候都要考虑异步,风格要一致…

  如果是阻塞方法,应该丢给外部队列比如celery去处理,不要使用多线程worker。

  如果是网络io导致的阻塞,可以利用tornado 的asyncHttpClient,将阻塞请求变为非阻塞

标签:
肚皮舞新闻动态News Center

肚皮舞视频

肚皮舞培训课程

联系卡伊丝contact us
联系我们
python培训「零基础入门到精通」python人工智能编程培训班-0798wz.com

咨询热线:18301225663