Python 使用gen.coroutine’;Tornado中的s回调参数

Python 使用gen.coroutine’;Tornado中的s回调参数,python,python-3.x,asynchronous,tornado,Python,Python 3.x,Asynchronous,Tornado,正在寻找一个简单的示例,演示如何使用的回调参数。文件说: 带有[code>gen.coroutine]装饰器的函数返回一个Future。此外,可以使用回调关键字参数调用它们,当将来的结果解析时,将调用该参数 根据《文档用户指南》,我认为我可以做到: from tornado import gen @gen.coroutine def divide(x, y): return x / y @gen.coroutine def good_call(): yield divide(

正在寻找一个简单的示例,演示如何使用的
回调
参数。文件说:

带有[code>gen.coroutine]装饰器的函数返回一个
Future
。此外,可以使用
回调
关键字参数调用它们,当将来的结果解析时,将调用该参数

根据《文档用户指南》,我认为我可以做到:

from tornado import gen

@gen.coroutine
def divide(x, y):
    return x / y

@gen.coroutine
def good_call():
    yield divide(1, 2)

good_call(callback=print)
我希望它打印
0.5
,但没有输出


我发现了大量的例子来演示不推荐的decorator,但是
gen.coroutine
上似乎没有那么多。在Python 3.5.1和Tornado 4.3上运行。

您仍然需要启动IOLoop。如果在脚本末尾添加
tornado.ioloop.ioloop.current().start()
,您将看到输出被打印出来(然后
ioloop
将永远运行。如果希望它停止,您需要在打印后从回调中执行此操作)


请注意,一般情况下,只使用协程和
yield
编写Tornado应用程序是可能的(并且受到鼓励),而不直接传递任何回调

这是蟒蛇吗。。。请尝试
sys.stdout.write
而不是print(因为print是py2中的一个语句),有关更多示例,请参阅.@a.JesseJiryuDavis,谢谢。我读过那篇文章,但它没有包含使用
回调
参数的示例。我建议不要尝试混合使用协程和回调。谢谢。我启动了循环,但输出是
None
,而不是
0.5
。我试着调试,但所有的杂技都失败了。(我将尽量避免使用
callback
参数,但仍然想了解为什么这不起作用。)它没有按预期工作,因为
good_call
必须返回将传递给callback的内容。使用
good_call
中的
return(收益率除以(1,2))
。我会解释这句话“原始的未来版本更复杂,但在Tornado中,期货仍然是推荐的做法…”让我们相信Tornado希望我们使用期货编写应用程序(并向期货添加回调)。。。我是否误解了这一点?我们鼓励您使用协同程序,它构建在后台的未来之上,但主要隐藏应用程序的未来和回调。