对无响应的 Flask 路由的调用设置超时(已更新)

2024-03-17

我目前在 Flask 应用程序中有一条路线,可以从外部服务器提取数据,然后将结果推送到前端。外部服务器偶尔会缓慢或无响应。在路由调用上设置超时的最佳方法是什么,以便在外部服务器滞后时前端不会挂起?或者在 Flask 中是否有更合适的方法来处理这种情况(而不是 Apache、nginx 等)?

我的目标是使路由调用超时,not保持任意长进程存活,就像这样的问题:chrome 和 Flask 的超时问题 https://stackoverflow.com/questions/18127128/time-out-issues-with-chrome-and-flask。像 websockets 这样的选项会运行后台进程/线程,直到它们完成;但是,我想在经过一段固定时间后停止慢速路由调用。喜欢函数调用超时 https://stackoverflow.com/questions/492519/timeout-on-a-python-function-call and Python超时 https://stackoverflow.com/questions/811692/python-timeout但在 Flask 上下文中。 Celery 的任务装饰器(使用 Python、Flask 和 Celery 的并发异步进程 https://stackoverflow.com/questions/14588253/concurrent-asynchronous-processes-with-python-flask-and-celery)似乎是一个很好的解决方案,但我不想需要很大的依赖来仅使用其少量功能。


不完全确定我对这一切是否正确,但我的理解是,如果处理请求的线程(或 greenthread)在它自己的“前台”中进行网络调用,并且该调用超时,则 borken 管道几乎是将要发生。但是您可以做的是分出一个完全独立的线程来执行网络请求,然后在请求处理代码中调用 Thread.join() 并设置超时。

http://docs.python.org/2/library/threading.html#threading.Thread.join http://docs.python.org/2/library/threading.html#threading.Thread.join

此时,调用 Thread.isAlive() (仍在请求处理代码路径中),如果为 True,则网络调用未及时返回,并且您将返回错误状态。

如果它是 False - 并且您需要让“工作”线程使用响应数据更新一些(线程安全)数据结构 - 您将获得该响应数据并继续您的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对无响应的 Flask 路由的调用设置超时(已更新) 的相关文章

随机推荐

  • 处理巨大的文本文件

    Problem 我有一个巨大的原始文本文件 假设有 3gig 我需要遍历文件中的每个单词 并找出某个单词在文件中出现了多少次 我建议的解决方案 将大文件拆分为多个文件 每个拆分文件都会按排序方式包含单词 例如 所有以 开头的单词a 将被存储
  • Three.js - 如何反序列化geometry.toJSON()? (geometry.fromJSON 在哪里?)

    我正在尝试卸载一些Geometry加载并处理到网络工作者中 要将其发送回主线程 Geometry实例需要序列化 看起来Geometry prototype toJSON 正是针对这种类型的事情 但我不知道如何将该对象转回Geometry主线
  • PHP 中比较 IP 地址与通配符的优化方法?

    任何人都知道一种有效且安全的方法来查看此输入是否 SERVER REMOTE ADDR 与类似于此不一致过滤器数组的内容匹配 请注意 200 100 可以仅表示为 200 100 并使用 表示的通配符 array 192 168 1 192
  • JavaFX:创建垂直菜单功能区

    我在这里试图完成的一个示例是 当您打开 Office Word 2013 文件并单击文件时 它会在左侧显示一个列表 Info New Open 有没有JavaFX成分像那样 我正在寻找一种 某物 列表 其项目垂直对齐 您可以单击执行某些操作
  • 自托管代理上的 Azure DevOps Python Pipeline Agent.ToolsDirectory 错误

    我有一个安装了 Python3 8 的自托管代理 我可以访问代理并运行 python 包的管道 我收到 Agent ToolsDirectory 与正确版本不匹配的错误 这是它输出的日志 Task 使用Python版本不会使用安装在托管代理
  • java.util.Date 与 java.sql.Date

    java util Date vs java sql Date 什么时候使用哪个以及为什么 恭喜 您已经解决了 JDBC 中我最讨厌的问题 日期类处理 基本上数据库通常至少支持three日期时间字段的形式 包括日期 时间和时间戳 其中每一个
  • 如何避免SQL中的“除以零”错误?

    我有这个错误消息 消息 8134 级别 16 状态 1 第 1 行 遇到除以零错误 编写 SQL 代码的最佳方式是什么 这样我就再也不会看到此错误消息了 我可以执行以下任一操作 添加一个 where 子句 使我的除数永远不为零 Or 我可以
  • Struts 1.3 中的多个提交按钮

    我的 JSP 中有以下代码
  • 在 Objective C 中使用 sizeof 等价物

    如何找到结构体的大小 sizeof 的使用在 Objective C 中不起作用 sizeof确实适用于struct在 Objective C 中 例如 size t pointsize sizeof NSPoint 另一方面 如果您对 O
  • Swiftui 中的 AsyncImage 不显示图像

    我在 TabView 中有 AsyncImage 当我这样做时 图像永远不会出现 我只看到进度条 available iOS 15 0 struct TEST View var body some View VStack TabView A
  • 为什么这个不同的“addSubView”代码会导致行为差异

    为什么将以下代码从旧条目更改为新条目可以修复以下问题 Code OLD Entry Did not work self window addSubview navigationController view NEW Entry Fixed
  • abs() 的错误操作数类型:“list”

    在计算数组每个值的绝对值时 我收到与 abs list 的错误操作数类型相关的错误 源代码失败的部分是下一个 x amplitudex sin 2 pi frequency 1 t phase y amplitudey sin 2 pi f
  • Oracle 基于函数的索引

    也许是一个愚蠢的问题 但是使用基于函数的索引是否安全 我的意思是 当列更改时索引会立即更改吗 假设它们设置正确 是的 概述 Oracle 在带有基于函数的索引的表上创建一个隐藏列 每次更改基于函数的索引的列时都会更新该隐藏列 假设这些值是确
  • Android 上的 Xamarin 表单选取器更改取消文本

    Android 上的 Xamarin Forms 单击选择器将打开对话框 否定按钮的默认文本为 取消 我怎样才能改变它 我查看了 Xamarin 的开源项目 他们设置了这样的肯定按钮文本 builder SetNegativeButton
  • C# 将程序添加到Windows启动(Windows 7)

    我试图通过将程序执行路径添加到注册表编辑器来将我的程序添加到 Windows 启动程序中 这是代码 RegistryKey registryKey Registry CurrentUser OpenSubKey SOFTWARE Micro
  • Android Webview 在三星和 Android 11 上崩溃

    这是我们在 Firebase 上看到的堆栈跟踪 Fatal Exception java lang RuntimeException Using WebView from more than one process at once with
  • Javascript Package 关键字的用途是什么?

    我正在阅读一些有关 JavaScript 保留关键字的在线材料 并且偶然发现了这个词package 我找不到任何清晰的在线材料可以解释它的用途 它是保留的 但不一定使用 好吧 至少在撰写本文时不是 以下内容被 ECMAScript 规范保留
  • Jsonpath 与 Jackson 或 Gson

    我收到一个大的 json 文档 我只想将其中的一部分解析到我的 java 类中 我正在考虑使用像 jsonpath 这样的东西从中提取部分数据 而不是创建 java 类的整个层次结构 Jackson 或 Gson 是否以任何方式支持 jso
  • 按值对 Tcl 字典排序

    我想知道 Tcl 中是否有一种按值对 dict 进行排序的优雅方法 假设我有以下字典 set d1 dict create k1 10 k2 89 k3 1 k4 15 k5 20 Results in dict of form k1 gt
  • 对无响应的 Flask 路由的调用设置超时(已更新)

    我目前在 Flask 应用程序中有一条路线 可以从外部服务器提取数据 然后将结果推送到前端 外部服务器偶尔会缓慢或无响应 在路由调用上设置超时的最佳方法是什么 以便在外部服务器滞后时前端不会挂起 或者在 Flask 中是否有更合适的方法来处