gpt4 book ai didi

python - 如何在 Tornado 中立即发送 GET 响应?

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:49 25 4
gpt4 key购买 nike

我有以下代码根据 api 调用将结果发送到浏览器。

import tornado.ioloop
import tornado.web
from tornado import gen
from datetime import date



class GetGameByIdHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self, id):
response = { 'id': int(id),
'name': 'Crazy Game',
'release_date': date.today().isoformat() }
self.set_header('Content-Type', 'text/json')
self.write(response)


for i in range(10000000):
for j in range(10):
pass
print i


application = tornado.web.Application([
(r"/getgamebyid/([0-9]+)", GetGameByIdHandler),
], debug = True)



if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

我希望 API 在遇到 self.write 时立即返回结果。之后应该运行 for 循环。我怎样才能完成这件事?基本上,我不想立即返回结果。

注意:这里的循环没有真正的目的,只是为了证明结果的发送仅仅因为 get 函数中的这个额外的东西而被延迟。

一个不太抽象的例子:

import tornado.ioloop
import tornado.web
from tornado import gen
from datetime import date



class GetGameByIdHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self, id):
result_dict = GetResultsFromDB(id)
response = result_dict
self.set_header('Content-Type', 'text/json')
self.write(response)

# Basically i want to doSomething basedon results
# Generated from DB
for key in result_dict:
if result_dict[key] == None:
DoSomething()


application = tornado.web.Application([
(r"/getgamebyid/([0-9]+)", GetGameByIdHandler),
], debug = True)



if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

最佳答案

如果您需要在将所有数据写入套接字后运行一些代码,您可以使用 tornado.web.RequestHandler.flush :

    self.write(response)
self.flush(callback=lambda: DoSomethingWrapper(response))

关于python - 如何在 Tornado 中立即发送 GET 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com