Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RuntimeError:无法在finish()之后写入()。可能是由于在没有@asynchronous decorator的情况下使用异步操作造成的_Python_Tornado - Fatal编程技术网

Python RuntimeError:无法在finish()之后写入()。可能是由于在没有@asynchronous decorator的情况下使用异步操作造成的

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

我在tornado服务器中发出post请求时出现上述错误

我有一门课

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方法告诉系统你完成了。

这里有一篇关于这个问题的好文章: