tornado異步時發現的錯誤,查了一下,原來tornado6以後就棄用了tornado.web.asynchronous這種寫法了。
Any method or function decorated with gen.coroutine
should be called using a yield
statement. Otherwise the coroutine won’t run.
So, you need to yield
the predict
method when you’re calling it.
@gen.coroutine
def post(self):
...
yield self.predict('mod1')
class GenAsyncHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response = yield http_client.fetch("http://example.com")
do_something_with_response(response)
self.render("template.html")
或者tornado降級回到5.1.1就沒問題了。
官文文檔:
https://www.tornadoweb.org/en/branch5.1/web.html#tornado.web.asynchronous
Changed in version 3.1: The ability to use @gen.coroutine without @asynchronous.
Changed in version 4.3: Returning anything but None or a yieldable object from a method decorated with @asynchronous is an error. Such return values were previously ignored silently.
Deprecated since version 5.1: This decorator is deprecated and will be removed in Tornado 6.0. Use coroutines instead.
pip uninstall tornado
pip install tornado==5.1.1