tornado io 阻塞 线程

来源:互联网 发布:js 数字字母正则 编辑:程序博客网 时间:2024/05/23 01:24
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
   
_workers = ThreadPool(10)
   
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 Handler(RequestHandler):
    @asynchronous
    def get(self):
        run_background(blocking_task, self.on_complete, (10,))
  
    def on_complete(self, res):
        self.write(str(res))
        self.finish()
  
HTTPServer(Application([("/", Handler)],debug=True)).listen(7777)
IOLoop.instance().start()
原创粉丝点击