gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:45:59 24 4
gpt4 key购买 nike

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

我的目标是使路由调用超时,像这样的 SO 问题:Time out issues with chrome and flask 保持任意长进程的事件状态.像 websockets 这样的选项运行后台进程/线程直到它们完成;但是,我想在经过一段固定的时间后停止慢速路由调用。喜欢Timeout on a function callPython Timeout但在 Flask 上下文中。 Celery 的任务装饰器 ( Concurrent asynchronous processes with Python, Flask and Celery ) 似乎是一个很好的解决方案,但我不想需要很大的依赖性才能只使用它的一小部分功能。

最佳答案

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

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

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

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

关于python - 对无响应的 Flask 路由的调用设置超时(更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18164393/

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