不能在期货龙卷风上调用结果,总是结果对象

时间:2017-11-13 22:21:49

标签: python python-2.7 server tornado

from somefolder import somelibrary

@gen.coroutine
def detailproduct(url):
    datafromlib=yield somelibrary(url)
    raise gen.Return(datafromlib)

期望: 查看没有请求处理程序的结果。 不是

的结果
{"data":<tornado.concurrent.future>}

我尝试这样的链接: “Can't call result() on futures in tornado” 但不行。

有人帮助我! TX

1 个答案:

答案 0 :(得分:1)

在使用gen.coroutine时,您必须牢记两条规则:

  1. gen.coroutine修饰函数将自动返回Future。
  2. 如果函数/协同程序调用另一个用gen.coroutine修饰的协程,则还必须使用gen.coroutine进行修饰,并且必须使用yield关键字来获取其结果。
  3. detailproduct饰有gen.coroutine - 这意味着它将始终返回包裹在未来中的datafromlib

    如何修复

    根据规则2,您必须使用gen.coroutine修饰来电者并使用yield关键字来获取未来的结果。

    @gen.coroutine
    def my_func():
        data = yield detailproduct(url) 
        # do something with the data ...
    

    OR

    您可以在Future上设置一个回调函数,该函数将在解析后调用。但它使代码变得混乱。

    def my_fun():
        data_future = detailproduct(url)
        data_future.add_done_callback(my_callback)
    
    def my_callback(future):
        data = future.result()
        # do something with the data ...