私は通常、竜巻ベースのWebアプリケーションの一部として使用するtornado gen.coroutine
を使用していくつかの非同期関数を使用しています。しかし、いくつかの管理作業を行うために、古いpythonスクリプトからそれらのいくつかを呼びたいと思います。これはどうすればいいですか?通常のPythonスクリプトでトルネード非同期コードを使用する
from tornado import gen
import some_internal_stuff
@gen.coroutine
def myfunc(x):
y = yield some_internal_stuff.another_async_func(x)
raise gen.Return(y)
if __name__ == "__main__":
# What do I put here to call myfunc(1) and get the async return value?
pass
更新:
より具体的な例:
この出力を実行するfrom tornado import gen
@gen.coroutine
def another_async_func(x):
print "aaf"
raise gen.Return(x + 1)
@gen.coroutine
def myfunc(x):
print "myfunc"
y = yield another_async_func(x)
print "back"
raise gen.Return(y)
def callback(y):
print "Callback called with %d" % y
if __name__ == "__main__":
myfunc(1, callback=callback)
:
myfunc
aaf
結果を待っていますか?あなたが呼び出す関数はこれを防ぐ竜巻に依存していますか? –
@rod:アイデアは 'another_async_func'は、通常はトルネード' IOLoop'の存在下で動作する別の竜巻 '@ asynchronous'メソッドです。 'another_async_func'を実行して' callback'を渡すことはできますが、竜巻が走っていなければ、 'myfunc'のyield後の行は決して実行されず、渡されたコールバックは呼び出されません。 – rakslice