@gen.coroutine
デコレータを使用して、GETリクエスト用の非同期コルーチンを使用しているPython3 tornado
Webサーバで作業しています。Pythonジェネレータとreduce
@gen.coroutine
def foo(x):
yield do_something(x)
十分に単純である:私は図書館から本機能を使用したい
@gen.coroutine
def get(self):
x = self.some_parameter
yield response(foo(x))
は今など、複数の機能foo1
、foo2
は、同じタイプであると仮定します。私はget
の方法でちょうどresponse(foo(x))
の代わりに...foo3(foo2(foo1(x).result()).result())...
とyield
のようなものをしたいと思います。
reduce
とresult
の方法ではこれが簡単だと思いました。しかし、tornado
の仕組みのために、foo
はresult
メソッドで何かを返すよう強制することはできません。つまり、yield reduce(...)
は「DummyFutureは結果のブロックをサポートしていません」というエラーを表示します。 SOおよび他の場所で他の回答からは、私は私は私は本当に理解していないIOLoop
か何かを、使用する必要があります知っている、と...
...私の質問は、どのように私はすべてのを評価避けるすることができますfoo
とyield
は、get
メソッドの評価されていないチャンクですか? 1.巣機能の多くと2がないがすぐに評価しよう:
編集:私はしたいので、これはthis questionの複製ではありません。
の可能性のある重複した[竜巻で先物に()の結果を呼び出すことはできません] (http://stackoverflow.com/questions/31172272/cant-call-result-on-futures-in-tornado) – Natecat
ネスティングをシミュレートする関数(-like)オブジェクトを返すことを意味する場合、[this](http ://stackoverflow.com/questions/15331726/how-does-the-functools-partial-work-in-python)は適切な複製です – Natecat