首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tornado中对redis进行异步写入

问如何在tornado中对redis进行异步写入
EN

Stack Overflow用户
提问于 2012-08-02 09:48:24
回答 1查看 3.4K关注 0票数 2

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

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

代码语言:javascript
复制
@tornado.web.asynchronous
@tornado.gen.engine
def post(self):
    ...
    yield tornado.gen.Task(t.set,'key', 'value')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 15:19:09

看看tornado-redis代码。Client.set方法有以下定义:

代码语言:javascript
复制
def set(self, key, value, callback=None):
    self.execute_command('SET', key, value, callback=callback)

所以,是的,它接受回调,并且可以与gen.Task一起使用。

异步编写的正确方法:

您正在讨论的使用gen的

  1. 方法。
  2. 方式,在github示例中描述。

来自github的示例:

代码语言:javascript
复制
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模块分隔类:

代码语言:javascript
复制
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.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11769965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档