将路由添加到静态文件后,烧瓶 API 非常慢



我有这个非常基本的测试代码:

from flask import Flask, send_from_directory
app = Flask(__name__, static_folder='react_app/build', static_path='')
@app.route('/api/test')
def test():
return "Test"
# Serve Website
@app.route('/')
def react_app():
return send_from_directory('react_app/build', 'index.html')
if __name__ == '__main__':
app.run(use_reloader=True)

/api/test路由初始化在我重新加载页面之前有效,而不是需要很长时间(60s+(或根本不工作。有时,当我再次重新加载应用程序时,我会收到之前挂起的请求。重新加载 react 应用程序有时会解决问题,有时会再次"导致"问题,我还没有真正找到任何规则来当它中断/工作时......但是为了让它再次"工作",我总是需要等待大约 1-2 分钟或重新启动计算机。似乎错误以某种方式被"缓存"了。

正如您可能知道的那样,我很难将问题指向特定区域,甚至很难随时清楚地描述和产生错误。 这是我尝试过的:

  • 按照代码所示提供反应应用程序,但使用测试节点.js
    API =>一切按预期工作,没有问题
  • 通过节点提供反应应用程序.js但使用显示的 python 代码作为 api。如果我删除#Server Website部分,它可以工作。 否则我得到描述的错误
  • 通过节点提供的 React 应用程序和 API .js =>一切正常
  • 尝试使用 Flask 为 API 和反应应用程序提供服务,但使用两个不同的 python 文件和两个不同的端口 => 与我使用一个 python 文件相同的问题

任何建议,我还可以尝试进一步确定错误源吗?

编辑:当处理cookie(例如,使用Chrome的"清除缓存"应用程序(时,当前待处理的请求神奇地通过...那么这实际上可能是 React 应用程序的问题吗?

默认情况下,Flask.run运行不支持并发请求的基元套接字服务器。这通常会导致像这样的明显锁定。

run()threaded=True参数一起使用,使其在每个请求中使用一个线程,这可以使其在面对并发请求时更加健壮。

app.run(use_reloader=True, threaded=True)

最新更新