0

いくつかの例から始めましょう。ライブラリtornado-redisがあり、以下はそれを使用した例です。

import tornadoredis
import tornado.web
import tornado.gen

c = tornadoredis.Client()
c.connect()

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.engine
    def get(self):
        foo = yield tornado.gen.Task(c.get, 'foo')
        bar = yield tornado.gen.Task(c.get, 'bar')
        zar = yield tornado.gen.Task(c.get, 'zar')
        self.set_header('Content-Type', 'text/html')
        self.render("template.html", title="Simple demo", foo=foo, bar=bar, zar=zar)

そして、すべてが簡単です。しかし、ラッパー クラスを記述する必要があります。コーディングには問題ありませんが、非同期パターンと間違えていると思います。

私のラッパー クラスは redis クラスを非同期で呼び出す必要がありますよね!? ハンドラーが Task (async) でクラスを呼び出せるように、クラスも非同期に実装する必要がありますか? 次に、2 つの非同期の場所があります。Tronadoを非同期に保ち、シンプルに保つ正しい方法は何ですか?

Handler --async call--> MyWrapper --async call--> tronado-redis

また

Handler --sync call--> MyWrapper --async call--> tronado-redis

また

Handler --async call--> MyWrapper --sync call--> tronado-redis
4

1 に答える 1

1

非同期関数は、他の非同期関数からのみ呼び出すことができます。tornado-redis は非同期であるため、RequestHandler とその間のすべても非同期である必要があります。

デコレータは RequestHandler メソッドでのみ使用されることに注意してください@tornado.web.asynchronous- RequestHandler の外部で非同期メソッドを作成するために、@gen.coroutineまたは@gen.engine単独で使用できます。

于 2013-10-11T13:51:56.903 に答える