【问题标题】:How tornado future works?龙卷风未来如何运作?
【发布时间】:2018-02-05 07:30:15
【问题描述】:
  1. 我正在用 tornado 编写一个 Web 服务器,我想知道 tornado.concurrent.Future 是如何工作的?我看过的例子 AsyncHTTPClient() 但如果我想制作自己的函数,它有一些 执行一些 IO 操作,例如从 memcache 中获取值 怎么做 我让它异步工作?

  2. 当我使用 websocket.WebSocketHandler 时,函数调用 write_message() 会阻塞服务器吗?我的代码如下:

 `class SocketHandler(websocket.WebSocketHandler):  
     @gen.coroutine     
     def getMemcVal(self):      
         self.write_message("some test value")`
  1. Future 与回调有何不同?

【问题讨论】:

  • 第二个问题,“是”。对于您的第一个问题,您首先需要学习如何异步编程。
  • 如果我只做yield self.write_message("some test value") 会很好用吗?
  • 不,它不会让工作变得更好。

标签: python asynchronous callback tornado


【解决方案1】:

关于async & await 工作原理的示例:

# python
async def example():
    response = await request.get(“http://www.google.com”)
    result = await response.read()
    print(result)

在nodejs中等于callback

function example() {
    request.get(“http://www.google.com”, function (response){
        response.read(function (result) {
            console.log(result)
        })
    })  
}

更新

那么Future 是什么?这是一个抽象的概念。你认为异步函数是一个对象,然后你认为event loop 正在调度多个对象,就像通过识别await 来调度多个线程一样。

但它里面的真实情况是什么?与callback 相同。它只是一个语法糖。

【讨论】:

  • result = await response.read() 这和发送回调不一样吗?
  • @aja 也一样。
  • 但是如果我使用 Future 有什么好处呢?
  • @aja 您可以像编写同步代码一样编写异步代码。不需要写很多回调,代码更清晰,流程控制也变得很简单。
  • 感谢您的帮助 +1
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 2018-11-30
  • 2011-10-27
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多