gpt4 book ai didi

python - Flask/http- 告诉客户端请求需要更多时间才能完成

转载 作者:可可西里 更新时间:2023-11-01 16:40:41 25 4
gpt4 key购买 nike

我有一个 Web 服务 (REST),其中一个请求可能需要长达 30 秒才能返回答案(大量计算)。存在一个风险,即在计算期间,客户端网络浏览器中止(?)现有连接并重试。这是服务器端的控制台输出:

Exception happened during processing of request from ('127.0.0.1', 53209)
Traceback (most recent call last):
File "C:\Users\tmx\Anaconda2\lib\SocketServer.py", line 290, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Users\tmx\Anaconda2\lib\SocketServer.py", line 318, in process_request
self.finish_request(request, client_address)
File "C:\Users\tmx\Anaconda2\lib\SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Users\tmx\Anaconda2\lib\SocketServer.py", line 654, in __init__
self.finish()
File "C:\Users\tmx\Anaconda2\lib\SocketServer.py", line 713, in finish
self.wfile.close()
File "C:\Users\tmx\Anaconda2\lib\socket.py", line 283, in close
self.flush()
File "C:\Users\tmx\Anaconda2\lib\socket.py", line 307, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] An established connection was aborted by the software in your host machine

我想到的一个选项是以某种方式通知客户端“我还活着,但请求仍然需要更多时间”,或者以某种方式在服务器端设置超时。有哪些可能性?

最佳答案

在您已经返回一些数据后,很难在 Flask 中运行代码。您的选择是要么使用任务队列之类的东西(请参阅 Celery ),要么在多个部分产生您的响应。

Flask 中的 View 可以返回字符串,但它们也可以返回包含字符串的可迭代对象。因此,您可以返回 "abc"["abc"] 或生成 "abc" 的生成器。如果您在两次产出之间进行处理,数据将在请求仍在运行时发送到客户端。

看看下面的例子:

def generator_that_does_the_calculation():
sleep(1)
yield "I'm alive, but I need some time\n"
sleep(1)
yield "Still alive here\n"
sleep(1)
yield "Done\n"

@app.route('/calculate')
def calculate():
return Response(generator_that_does_the_calculation())

关于python - Flask/http- 告诉客户端请求需要更多时间才能完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42491802/

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