2017-10-01 38 views
0

运行代码时,我得到的Python3龙卷风不能正确屈服?

ERROR:tornado.application:Future exception was never retrieved: Traceback (most recent call last): File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\site-packages\tornado\gen.py", line 1069, in run yielded = self.gen.send(value) File "C:\Users\Ben\Documents\GitHub\app-development\server\server.py", line 20, in serve self.write(r) File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\site-packages\tornado\web.py", line 708, in write raise RuntimeError("Cannot write() after finish()") RuntimeError: Cannot write() after finish()

错误为什么会出现这种情况?我引用这个question(第二个答案) 我相信我正确使用yield语句。

class MainHandler(tornado.web.RequestHandler): 
    executor = ThreadPoolExecutor(max_workers=64) 

    def get(self): 
     task = self.get_argument('task') 
     self.serve(task) 

    @tornado.gen.coroutine 
    def serve(self, task): 
     method = getattr(self, task) 
     r = yield method() 
     self.write(r) 

    @run_on_executor 
    def announcements(self): 
     time.sleep(5) 
     print("Done") 
     with open('announcements.json') as announce_data: 
      data = json.load(announce_data) 
     print(data) 
     return data 

回答

1

get也必须是一个协程:

@gen.coroutine 
def get(self): 
    task = self.get_argument('task') 
    yield self.serve(task) 

在龙卷风中,只有协同程序可以调用协程。