0

下面是简单的 hello world 应用程序。如何在两个线程中以 1 秒的睡眠时间调用龙卷风“/”。因此,该页面每秒将被调用 2 次。稍后我需要扩展到 redis 调用,但现在想从简单的开始,因为我不熟悉这个逻辑。我需要构建一个可重复异步调用的网页。

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(8880)
    tornado.ioloop.IOLoop.instance().start()
4

1 回答 1

0

如果您是新手tornado,请查看tornadogist。他们有很多有用的代码片段。这是适合您需要的一种:

from time import sleep
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, asynchronous, RequestHandler
from multiprocessing.pool import ThreadPool

# 2 threads
_workers = ThreadPool(2)

def run_background(func, callback, args=(), kwds={}):
    def _callback(result):
        IOLoop.instance().add_callback(lambda: callback(result))
    _workers.apply_async(func, args, kwds, _callback)

# blocking task like querying to MySQL
def blocking_task(n):
    sleep(n)
    return n

class MainHandler(RequestHandler):
    @asynchronous
    def get(self):
        run_background(blocking_task, self.on_complete, (1,))

    def on_complete(self, res):
        self.write("Test {0}<br/>".format(res))
        self.finish()

HTTPServer(Application([("/", MainHandler)],debug=True)).listen(8888)
IOLoop.instance().start()
于 2013-11-11T00:44:42.160 回答