假设某个操作可能需要在服务器上执行 2 到 10 分钟,例如更新索引,这非常耗时。
您会在保留请求的同时执行该操作吗?即在操作完成之前不发送 HTTP 响应?如果客户端/浏览器丢弃请求,是否仍继续操作?
有什么替代方案吗?启动操作,并响应“长时间操作启动”?如果操作中途失败怎么办,客户端怎么知道?维护操作的服务器端“状态”?
谢谢
最佳答案
您还可以使用分块响应。首先,推送带有一些代码的 block ,这些代码将显示“请稍候”屏幕,刷新响应并开始工作。然后,您可以通过定期进度更新推送和刷新 block ,或者仅在最后推送一个带有“已完成”信息的 block 。显然,您可以使用 JavaScript 来获得漂亮的 UI。
(如果您使用 WSGI,则上述内容不适用,因为第一个 WSGI 规范的编写方式会阻止使用未知长度的响应,因此不可能使用分块响应。)
关于python - 当服务器执行耗时的操作时是否应该保留 HTTP 请求?或者放弃这个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7587939/