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 回答