以下是我的来源:
class Get_Salt_Handler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@tornado.gen.coroutine
def get(self):
#yield tornado.gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 5)
yield tornado.gen.Task(self.get_salt_from_db, 123)
self.write("when i sleep 5s")
def get_salt_from_db(self, params):
print params
我跑了;控制台报告说: TypeError:get_salt_from_db()得到了一个意外的关键字参数'回调' 而且我不知道为什么?
答案 0 :(得分:2)
gen.Task
用于使基于回调的函数适应协程样式;它不能用于调用同步函数。您可能需要的是ThreadPoolExecutor
(Python 3.2+中的标准,Python 2上的pip install futures
可用):
# global
executor = concurrent.futures.ThreadPoolExecutor(NUM_THREADS)
@gen.coroutine
def get(self):
salt = yield executor.submit(self.get_salt_from_db)