gpt4 book ai didi

Tornado 6.0.3 从 4.2 : module 'tornado.web' has no attribute 'asynchronous'

转载 作者:行者123 更新时间:2023-12-03 09:37:34 25 4
gpt4 key购买 nike

我已经从 tornado 4.2 移动到 tornado 6.0.3,我得到了错误

AttributeError:模块“tornado.web”没有属性“异步”

根据 tornado v6 seems to have dropped tornado.web.asynchronous coroutine. any different way of fixing this in code? 中的讨论

我将@tornado.web.asynchronous 更改为@tornado.gen.coroutine,这是固定的,接下来我得到了

RuntimeError:完成()后无法写入()

根据 RuntimeError: Cannot write() after finish(). May be caused by using async operations without the @asynchronous decorator

我在 write() 之后有 self.finish(),没有错误,但没有得到任何输出

这是我的代码

class MyHandler(RequestHandler):
_thread_pool = ThreadPoolExecutor(max_workers=10)

@tornado.gen.coroutine
def post(self):
try:
data = tornado.escape.json_decode(self.request.body)
self.predict('mod1')
except Exception:
self.respond('server_error', 500)

@concurrent.run_on_executor(executor='_thread_pool')
def _b_run(self, mod, X):
results = do some calculation
return results

@gen.coroutine
def predict(self, mod):
model = mod (load from database)
values = (load from database)
results = yield self._b_run(model, values)
self.respond(results)

def respond(self, code=200):
self.set_status(code)
self.write(json.JSONEncoder().encode({
"status": code
}))
self.finish()

虽然完成是在写入之后,但我没有得到输出

最佳答案

任何用 gen.coroutine 修饰的方法或函数应该使用 yield 调用陈述。否则协程不会运行。

所以,你需要yield predict调用时的方法。

@gen.coroutine
def post(self):
...
yield self.predict('mod1')
...

关于 Tornado 6.0.3 从 4.2 : module 'tornado.web' has no attribute 'asynchronous' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56964487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com