18

メインプロセスに影響を与えずに遅延機能のトルネードに同等のコマンドがありますか(したがって、メインスレッドが新しい関数呼び出しを処理している場合でもコールバックが実行されます)

4

3 に答える 3

30

これを試して:

import time
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, asynchronous
from tornado import gen

class MyHandler(RequestHandler):
    @asynchronous
    @gen.engine
    def get(self):
        self.write("sleeping .... ")
        self.flush()
        # Do nothing for 5 sec
        yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)
        self.write("I'm awake!")
        self.finish()

ここから撮影。

于 2012-06-21T09:24:45.283 に答える
21

4.1 以降、gen.sleep(delay)メソッドが追加されていることに注意してください。

それで

yield gen.Task(IOLoop.instance().add_timeout, time.time() + 5)

ただになるだろう

yield gen.sleep(5)
于 2015-02-12T01:29:54.997 に答える
7

冗長な場合があります

コールバックスタイルが好き

class MyHandler(RequestHandler):
    @asynchronous
    def get(self):
        self.write("sleeping .... ")
        self.flush()
        IOLoop.instance().add_timeout(time.time() + 5, self._process)

    def _process(self)
        # Do nothing for 5 secs
        self.write("I'm awake!")
        self.finish()
于 2013-10-25T01:10:03.963 に答える