Asynchronous 最简单的tornado.gen示例

Asynchronous 最简单的tornado.gen示例,asynchronous,tornado,Asynchronous,Tornado,我尝试使用以非阻塞方式运行一个简单的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

我尝试使用以非阻塞方式运行一个简单的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请求,这与异步运行某些东西无关。然而,这总是失败的:

Traceback (most recent call last):
  File "./server.py", line 46, in <module>
runme()
TypeError: wrapper() takes at least 1 argument (0 given)
回溯(最近一次呼叫最后一次):
文件“/server.py”,第46行,在
runme()
TypeError:包装器()至少接受1个参数(给定0个)

我到底在哪里遗漏了这个论点?如何使Tornado异步运行此函数?

任务实际上并没有像我最初所想的那样,对正在运行的函数进行回调,并在函数返回时启动回调

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

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()

你的代码到底做什么?既然callback是None,那么调用echo(message=“this is message”,callback=None)时不会引发异常吗?。Tornado将
gen.Callback
函数传递给
echo
。除此之外,我仍在努力弄清楚自己:)它缺少一个返回,
返回回调(message)
。这样,在生成任务时,它会异步响应。