最简单的tornado.gen示例

时间:2012-11-21 17:36:45

标签: asynchronous tornado

我正在尝试使用Tornado's sync-style 'gen' tool以非阻塞样式运行简单的echo函数:

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异步运行此函数?

1 个答案:

答案 0 :(得分: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()