Asynchronous 关于tornado.gen.Task';s用法-异步请求

Asynchronous 关于tornado.gen.Task';s用法-异步请求,asynchronous,tornado,Asynchronous,Tornado,以下是我的资料来源: 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 to

以下是我的资料来源:

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()获取了意外的关键字参数“callback”
我不知道为什么?

gen.Task
用于将基于回调的函数调整为协同程序样式;它不能用于调用同步函数。您可能需要的是
ThreadPoolExecutor
(Python 3.2+中的标准配置,可在Python 2上的
pip install futures
中获得):


tornado.gen.Task(func、*args、**kwargs)修改了一个基于回调的异步函数,以便在协同路由中使用。接受一个函数(以及可选的附加参数),并使用这些参数和回调关键字参数运行该函数。传递给回调函数的参数作为yield表达式的结果返回。在版本4.0中更改:gen.Task现在是一个返回未来的函数,而不是YieldPoint的子类。当它屈服时,它的行为仍然是一样的。我不明白!!
# global
executor = concurrent.futures.ThreadPoolExecutor(NUM_THREADS)

@gen.coroutine
def get(self):
    salt = yield executor.submit(self.get_salt_from_db)