Quickstart¶
Requirements¶
- Python 2.7 or Python >= 3.2
- unix operating system (linux, osx...)
- a running redis server (>= 2.0)
First try (coroutines)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # Let's import tornado and tornadis
import tornado
import tornadis
@tornado.gen.coroutine
def talk_to_redis():
# let's (re)connect (autoconnect mode), call the ping redis command
# and wait the reply without blocking the tornado ioloop
# Note: call() method on Client instance returns a Future object (and
# should be used as a coroutine).
result = yield client.call("PING")
if isinstance(result, tornadis.TornadisException):
# For specific reasons, tornadis nearly never raises any exception
# they are returned as result
print "got exception: %s" % result
else:
# result is already a python object (a string in this simple example)
print "Result: %s" % result
# Build a tornadis.Client object with some options as kwargs
# host: redis host to connect
# port: redis port to connect
# autoconnect=True: put the Client object in auto(re)connect mode
client = tornadis.Client(host="localhost", port=6379, autoconnect=True)
# Start a tornado IOLoop, execute the coroutine and end the program
loop = tornado.ioloop.IOLoop.instance()
loop.run_sync(talk_to_redis)
|
Second try (callbacks)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # Let's import tornado and tornadis
import tornado
import tornadis
def ping_callback(result):
if not isinstance(result, tornadis.TornadisException):
# For specific reasons, tornadis nearly never raises any exception
# they are returned as result
print "got exception: %s" % result
else:
# result is already a python object (a string in this simple example)
print "Result: %s" % result
@tornado.gen.coroutine
def main():
# let's (re)connect (autoconnect mode), call the ping redis command
# and wait the reply without blocking the tornado ioloop
# Note: async_call() method on Client instance does not return anything
# but the callback will be called later with the result.
client.async_call("PING", callback=ping_callback)
yield tornado.gen.sleep(1)
# Build a tornadis.Client object with some options as kwargs
# host: redis host to connect
# port: redis port to connect
# autoconnect=True: put the Client object in auto(re)connect mode
client = tornadis.Client(host="localhost", port=6379, autoconnect=True)
# Start a tornado IOLoop, execute the coroutine and end the program
loop = tornado.ioloop.IOLoop.instance()
loop.run_sync(main)
|
Go further: Pipeline¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # Let's import tornado and tornadis
import tornado
import tornadis
@tornado.gen.coroutine
def pipeline_coroutine():
# Let's make a pipeline object to stack commands inside
pipeline = tornadis.Pipeline()
pipeline.stack_call("SET", "foo", "bar")
pipeline.stack_call("GET", "foo")
# At this point, nothing is sent to redis
# let's (re)connect (autoconnect mode), send the pipeline of requests
# (atomic mode) and wait all replies without blocking the tornado ioloop.
results = yield client.call(pipeline)
if isinstance(results, tornadis.TornadisException):
# For specific reasons, tornadis nearly never raises any exception
# they are returned as results
print "got exception: %s" % results
else:
# The two replies are in the results array
print results
# >>> ['OK', 'bar']
# Build a tornadis.Client object with some options as kwargs
# host: redis host to connect
# port: redis port to connect
# autoconnect=True: put the Client object in auto(re)connect mode
client = tornadis.Client(host="localhost", port=6379, autoconnect=True)
# Start a tornado IOLoop, execute the coroutine and end the program
loop = tornado.ioloop.IOLoop.instance()
loop.run_sync(pipeline_coroutine)
|
Installation without pip¶
- install tornado >= 4.2
- install python wrapper for hiredis
- install six
- download and uncompress a tornadis release
- run
python setup.py install
in the tornadis directory