2017-10-01 36 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) 

在龍捲風中,只有協同程序可以調用協程。