Python3龙卷风没有正确屈服?

时间:2017-10-01 04:40:22

标签: python python-3.x tornado

运行代码时出现错误

  

错误:tornado.application:从未检索到未来异常:Traceback(最近一次调用最后一次):     文件“C:\ Users \ Ben \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tornado \ gen.py”,第1069行,在运行中       yielded = self.gen.send(value)     文件“C:\ Users \ Ben \ Documents \ GitHub \ app-development \ server \ server.py”,第20行,在服务中       self.write(r)的     文件“C:\ Users \ Ben \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ tornado \ web.py”,第708行,写入       引发RuntimeError(“在finish()之后无法写()”)   RuntimeError:在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 个答案:

答案 0 :(得分:1)

get也必须是协程:

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

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