0

簡単な例があります:

c = tornadoredis.Client()
c.connect()

class SourceHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
    pipe = c.pipeline(transactional=True)
    pipe.zadd( 'test1'), 1212, "test" )
    pipe.zadd( 'test2'), 1212, "test" )
    .....
    pipe.zadd( 'testN'), 1212, "test" )
    res = yield tornado.gen.Task(pipe.execute)
    self.set_header('Content-Type', 'text/html')
    self.render("template.html", title="result")

この要求の時間 = N * zadd 操作の時間。

このリクエストの時間を短縮できますか?

4

1 に答える 1

1

パイプライン要求は、その中のすべての操作がアトミックユニットとして実行されることを要求するトランザクション要求です。ステートメント-get(...)関数に実行が戻るまでres = yield tornado.gen.Task(pipe.execute)、すべてのステートメントが実行されるまで待機します。zadd

実行時間を短縮できる唯一の方法はgen.engine、ファイアアンドフォーゲットパターンのビットを削除することですが、応答情報はなくなります。

class SourceHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        pipe = c.pipeline(transactional=True)
        pipe.zadd( 'test1'), 1212, "test" )
        pipe.zadd( 'test2'), 1212, "test" )
        ...
        pipe.execute()
        # of course you no longer have the response information...
        ...old code...
于 2012-05-23T13:14:28.517 に答える