2017-08-11 84 views
1

后,我有这个很基本的测试代码:瓶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路线initialy工作,直到我重新载入页面,比它要么需要很长(60 +)或不根本不工作。有时,当我重新加载应用程序时,我收回之前未处理的请求。重新加载反应应用程序有时会解决问题,有时会再次导致问题,但我没有真正发现任何破解/工作原则......但为了让它再次“工作”,我总是必须等待约1-2分钟或重新启动计算机。似乎错误会以某种方式“缓存”。你可能会说,我很难把这个问题指向特定的领域,甚至在任何时候都能清楚地描述并产生错误。 这是我曾尝试:

  • 服务的反应,应用如图所示的代码,但使用的是测试的Node.js
    API =>一切正常,没有任何问题
  • 服务的react-应用程序通过node.js,但使用显示的Python代码的API。它可以工作,如果我删除#Server Website部分。否则我得到的描述错误
  • 阵营App和API通过提供Node.js的=>一切工作正常
  • 试图服务的API,并与瓶的反应程序,但是有两个不同的Python文件和两个不同的端口= >同样的问题,如果我会使用一个python文件

任何建议还有什么我可以尝试进一步固定错误源?

编辑:当清除cookie(例如,用于Chrome的“清除缓存”应用程序)时,当前挂起的请求神奇地通过...所以这实际上可能是反应应用程序的问题吗?

回答

1

默认情况下,Flask.run运行不支持并发请求的原始文件socket server。这通常会造成像这样的明显锁定。

使用run()threaded=True参数使它使用thread per request,这可以使它在面对并发请求时更健壮。

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

另请注意,Flask socket服务器仅用于开发。其他用于生产的套接字服务器强烈建议。如果你不想自己编码,请看Twisted或类似的东西。 –