在Tornado中使用gen.coroutine的回调参数

时间:2016-03-17 17:50:14

标签: python python-3.x asynchronous tornado

寻找一个演示使用tornado.gen.coroutinecallback参数的简单示例。文档说:

  

[gen.coroutine]装饰器的函数返回Future。此外,可以使用callback关键字参数调用它们,当它结算时将使用将来的结果调用它们。

从文档的用户指南中调整an example,我认为我可以这样做:

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,但没有输出。

我发现了大量示例,展示了已弃用的gen.engine装饰器,但gen.coroutine上似乎没有那么多。在Python 3.5.1和Tornado 4.3上运行。

1 个答案:

答案 0 :(得分:1)

你仍然需要启动IOLoop。如果您在脚本末尾添加tornado.ioloop.IOLoop.current().start(),则会看到打印的输出(然后IOLoop会永久运行。如果您希望它停止,您需要执行此操作所以从打印后的回调中获得。)

请注意,通常可以(并鼓励)仅使用协同程序和yield编写Tornado应用程序,而不直接传递任何回调。