感谢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
一起使用。
异步写入的正确方法:
- 您所描述的方式,使用
gen
。 - 方式,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/