1

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 リクエストを処理していません。しかし、これは常に失敗します:

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

正確にどこに引数がありませんか? Tornado にこの関数を非同期で実行させるにはどうすればよいですか?

4

1 に答える 1

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()
于 2012-11-21T17:42:21.180 に答える