Python RuntimeError:无法在finish()之后写入()。可能是由于在没有@asynchronous decorator的情况下使用异步操作造成的
我在tornado服务器中发出post请求时出现上述错误 我有一门课Python RuntimeError:无法在finish()之后写入()。可能是由于在没有@asynchronous decorator的情况下使用异步操作造成的,python,tornado,Python,Tornado,我在tornado服务器中发出post请求时出现上述错误 我有一门课 class RestRequestHandler(RequestHandler): def async_get(self, *args, **kwargs): pass def async_post(self, *args, **kwargs): pass 我正在将上面的类导入到另一个py文件中 class get_question_details(RestRequestHa
class RestRequestHandler(RequestHandler):
def async_get(self, *args, **kwargs):
pass
def async_post(self, *args, **kwargs):
pass
我正在将上面的类导入到另一个py文件中
class get_question_details(RestRequestHandler):
def async_post(self, activity_id, attempt_id, quiz_id, question_id,
questionusage_id, slot, user_name, courseshortname):
client = get_moodle_client()
当我提出这个请求时,我得到了如下警告
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 421, in _run_callback
callback()
File "/usr/local/lib/python2.7/dist-packages/gameonapi/server/rest.py", line 142, in async_post_callback
self.return_ok(result)
File "/usr/local/lib/python2.7/dist-packages/gameonapi/server/rest.py", line 214, in return_ok
self.write (result)
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 489, in write
raise RuntimeError("Cannot write() after finish(). May be caused "
RuntimeError: Cannot write() after finish(). May be caused by using async operations without the @asynchronous decorator.
从这个错误中,我理解了问题的起因,因为我没有使用tornado@asynchronous
,但在使用它之后,我仍然得到了同样的警告
请告诉我我可能做错了什么。也许你应该为你的类注册Post方法,因为我不知道tornado会以你的方式处理Post请求。 检查这个问题。
如果不使用
@asynchronous
装饰器,则在函数完成之前会自动调用self.finish()
函数
你应该做的是
class RestRequestHandler(RequestHandler):
@tornado.web.asynchronous
def async_get(self, *args, **kwargs):
self.write('ok')
self.finish()
@tornado.web.asynchronous
def async_post(self, *args, **kwargs):
self.write('ok')
self.finish()
这样,系统就给你机会写出你想写的任何东西。写完后,你需要调用self.finish方法告诉系统你完成了。这里有一篇关于这个问题的好文章: