#!/usr/local/bin/python3 # -*- coding: utf-8 -*- import time from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from tornado.web import Application, asynchronous, RequestHandler from multiprocessing.pool import ThreadPool from multiprocessing.pool import ApplyResult from tornado import gen # https://gist.github.com/methane/2185380 参考 html_content = """

任务测试


""" class MainPage(RequestHandler): def get(self): self.write(html_content) _workers = ThreadPool(10) _result = {} # 后台任务。 def blocking_task(n, tid): time.sleep(n) print(tid) _result[tid] = {"finish"} class AddJobHandler(RequestHandler): @gen.coroutine def get(self): tid = str(int(time.time() * 10000)) _workers.apply_async(blocking_task, (10, tid)) # 传递参数 10 秒。 self.write(tid) self.finish() # 先finish 掉,然后在后台执行。 class JobCheckHandler(RequestHandler): def get(self): tid = self.get_argument("tid") if tid in _result.keys(): out = _result[tid] # 结果 del _result[tid] # 删除tid的数据。 self.write(str(out)) else: self.write("") # main 启动。 if __name__ == "__main__": HTTPServer(Application([ ("/", MainPage), ("/add_job", AddJobHandler), ("/job_check", JobCheckHandler) ], debug=True)).listen(9090) print("start web .") IOLoop.instance().start()