2012-11-21 109 views
1

我试图用Tornado's sync-style 'gen' tool运行一个简单的回声功能,在无阻塞风格:最简单的例子tornado.gen

import tornado.web 
import tornado.gen 
import logging 

def echo(message): 
    return message 

@tornado.gen.engine 
def runme(): 
    response = yield tornado.gen.Task(echo, 'this is a message') 
    logging.warn(response) 

runme() 

至于我可以告诉这个代码不显著不同的演示代码在文档中,减去不必要的请求处理程序的东西 - 我没有处理任何HTTP请求,AFAICT这是异步运行的东西是异步的。然而,这总是失败:

Traceback (most recent call last): 
    File "./server.py", line 46, in <module> 
runme() 
TypeError: wrapper() takes at least 1 argument (0 given) 

究竟我在哪里失踪的论点?我如何让Tornado异步运行此功能?

回答

2

任务实际上并没有对正在运行的函数进行回调,并且在函数返回时开始回调,正如我原先所想的那样。

我需要创建任务的回调正在运行的自己,并调用它,即:

import tornado.web 
import tornado.gen 
import logging 

def echo(message, callback=None): 
    callback(message) 

@tornado.gen.engine 
def runme(): 
    response = yield tornado.gen.Task(echo, 'this is a message') 
    logging.warn(response) 

runme() 
+0

究竟你的代码做什么?因为回调是None,是不是会在调用echo时产生异常(message =“this is a message”,callback = None)? –

+0

[请参阅“任务”的功能描述](http://www.tornadoweb.org/en/stable/gen.html?highlight=task#tornado.gen)。龙卷风将'gen.Callback'函数传递给'echo'。除此之外,我仍然试图找出自己:) – Cuadue

+0

它缺少一个返回,'回调回调(消息)'。这种方式在产生任务时异步回声。 – danigosa