【问题标题】:How does async work in Tornado?Tornado 中的异步是如何工作的?
【发布时间】:2013-02-26 15:52:19
【问题描述】:

Tornado 文档中的所有示例都展示了我们如何使用 Tornado 异步发出更多 HTTP 请求。

http_client = httpclient.AsyncHTTPClient()
http_client.fetch("http://www.google.com/", handle_request)

虽然我想确保我的龙卷风不会等待数据库的响应(获取 couchbase 的命令)来发送下一个。

查看my other bug 了解我为什么要异步调用 couchbase。

【问题讨论】:

  • “异步”和“不等待响应”不是一回事吗?所以这些例子应该能准确地告诉你你想要什么,是吗?
  • 是同一个东西,问题是 Torndao 开始等待 Couchbase 的响应。

标签: python asynchronous tornado couchbase


【解决方案1】:

据我所知,Couchbase 驱动程序是not an async driver,所以这不起作用。使 db 调用同步并尽可能快地对其进行优化。

(可怕的)替代方法是使用 couchbase 的驱动程序并使用 gevent 之类的东西对其进行修补,以创建您自己的异步驱动程序。我不建议这样做。如果你真的想走这条路,看看这个家伙对Motor 做了什么——他让 mongo 驱动程序异步。

【讨论】:

  • 你为什么不推荐这个?
  • 因为它很容易出错,而且每次 couchbase 生成他们的驱动程序的新版本时,您都必须重新执行所有操作。
  • 问题在给定的机器上是连续的,我每秒只能对数据库进行 500 次同步调用,而异步则可以异步扩展到 5000+。 Couchbase 驱动程序效率不高,我对 aysnc 的计划是间接克服其效率低下的问题。对于所述场景,您有什么建议?
  • 我们也可以使用twisted之类的东西,不是吗?
  • 简短回答没有。长答案,您可以使用旋风分离器,但这会让您的生活变得更难而不是更轻松
【解决方案2】:

请参阅Tornado wiki on github 和此similar question on StackOverflow。只需让您的数据库调用同步。如果您的数据库或对数据库/数据库驱动程序的调用是您的瓶颈,即使龙卷风没有被阻止,您的网站也不会更快。当请求不受您控制的资源时,执行异步调用可能更有意义,因为其他网络服务器或资源对您网站的大多数部分(如文件 I/O)并不重要。

【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多