python - 如何在tornado中异步写入redis

标签 python redis tornado

感谢this post ,我正在尝试异步驱动程序tornado-redis。从演示( Github example )中,它显示了如何使用这个库进行异步操作,但我不清楚这些集合是否也是异步的(它们确实有回调函数)。

那么如果可能的话,使用tornado-redis进行异步写入的正确方法是什么?会是这样吗:

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

最佳答案

查看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.

关于python - 如何在tornado中异步写入redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769965/

相关文章:

python - 使用python从csv文件中提取部分数据

python - 我们如何才能在 plotly boxplot 背后获得不同的统计数据?

redis - Redis 在写入期间是否锁定?

jquery - 使用 Tornado 向ajax发送响应

python - Tornado 测试失败,返回 "TypeError: __init__() takes exactly 1 argument (2 given)"

python - 使用 Tornado 进行路线测试

python pandas : Why can't I use both index_col and usecols in the same read_csv statement ? 引发 valueError

python - 如何让用户保持在 session 中

redis - 如何在正在运行的 docker-compose 容器中进入 redis-server shell

redis - ServiceStack 的 IRedisClientManager + Ninject - 使用 InSingletonScope?