2

この投稿のおかげで、私は非同期ドライバーを試していますtornado-redis。デモ(Githubの例)から、非同期を実行する方法がこのライブラリを使用することを示していますが、セットが非同期であるかどうか(コールバック関数があります)はわかりません。

では、可能であれば、を使用して非同期書き込みを行う正しい方法は何tornado-redisですか?次のようになりますか?

@tornado.web.asynchronous
@tornado.gen.engine
def post(self):
    ...
    yield tornado.gen.Task(t.set,'key', 'value')
4

1 に答える 1

3

tornado-redisコードを見てください。Client.setメソッドには次の定義があります。

def set(self, key, value, callback=None):
    self.execute_command('SET', key, value, callback=callback)

そうです、それはコールバックを取り、で使用することができますgen.Task

非同期で書く正しい方法:

  1. を使用して、問題で説明した方法gen
  2. ちなみに、githubの例で説明されています。

githubの例:

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

def on_set(result):
    log.debug("set result: %s" % result)

c.set('foo', 'Lorem ipsum #1', on_set)
c.set('bar', 'Lorem ipsum #2', on_set)
c.set('zar', 'Lorem ipsum #3', on_set)

genモジュールでクラスを分離します。

class MyRedisWrapper(object):
    @gen.engine
    def set(self, key, value):
        yield tornado.gen.Task(t.set, key, value)

r = MyRedisWrapper()

class MyHandler(tornado.web.RequestHandler):
    def get(self):
        r.set('key', 'value') #It will work, but not sure about efficiency.
于 2012-08-02T07:19:09.097 に答える