从基于Web的客户端取消Flask后端进程

2024-04-24 08:58:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Flask应用程序在后端运行,并通过一些端点将一些数据传递给客户机Web应用程序。例如

@app.route('/extract_entities_from_matching_docs', methods=['POST'])
def extract_entities_from_matching_docs():
   data = request.form
   entities = storage.get_entities_in_docs_by_keywords(data[“keywords”])
   return jsonify(entities)

这只是一个例子,但有时,这类方法需要花费太多的时间来处理,用户可能希望从客户端取消处理(例如,假设您在客户端上有一个“取消”按钮)

我的问题是:如何从前端取消后端正在运行的进程?我想我可以在循环中包含一个标志,所以如果标志设置为true,它将继续循环和处理,否则,它将返回。但是这样一个简单的替代方案的问题是:如果客户端只是关闭浏览器的标签呢?进程将继续在后端运行,没有理由这样做。也许通过每x分钟从客户端发送到另一个标志,让后端知道有一个客户端在等待响应。但也许有一个更优雅的解决方案我忽略了

我不太喜欢后端,但我需要解决这个问题。那么,你能给我推荐其他的选择吗?有什么要读的吗?或者你知道有没有什么好的方法来面对这个问题


Tags: 数据方法from应用程序客户端flaskdocsdata
1条回答
网友
1楼 · 发布于 2024-04-24 08:58:33

你想要的不容易实现。一般来说,解决方案是不用麻烦,让请求在后台运行,只需接受它。最后,大多数请求可能不会被“取消”,因此开发这种解决方案的开销超过了次要的好处

如果你的任务真的是长时间运行的(我指的是几分钟甚至更多),那么你应该把它们卸载到类似芹菜的任务中。在这种情况下,您可以保留对任务ID的引用并撤销它(传递terminate=True也应该处理已经运行的任务)

相关问题 更多 >