WSGI 是一种协议,是将您的代码与运行它的实际 Web 服务器分开的外观。
\n\n在 Flask 中,您只创建服务器的逻辑。在运行时,您的 Flask 应用程序由 WSGI 服务器提供服务。最常见的是uWSGI (&nGinx代理到外部世界和您的服务器之间的安全边界)。但您可以使用最适合您的 WSGI 服务器,而无需更改代码 (nichol.as/benchmark-of-python-web-servers)*。
\n\nFlask 本身仅随开发 WSGI Flask 服务器一起提供。这意味着服务器使用很多功能来帮助开发人员调试他们的应用程序。这些功能使得服务器速度非常慢。因此,当您在开发 WSGI Flask 服务器上对应用程序进行基准测试时,结果对您没有任何价值。
\n\n另一方面,专门的生产就绪型 WSGI 服务器(包括 uWSGI)经过了良好的优化、测试和生产验证。大多数功能通常默认关闭,并允许您针对您的应用程序微调这些强大的功能。
\n\n部署教程:
\n\n现在当我解释了上下文后,回到你原来的问题。我会在您的中设置请求超时:
\n\nimport requests\nrequests.get(\'https://api.myapp.com\', timeout=3)\n<Response [200]>\nRun Code Online (Sandbox Code Playgroud)\n\nhttp\n{\n server\n {\n \xe2\x80\xa6\n location /\n {\n \xe2\x80\xa6\n proxy_read_timeout 120s;\n \xe2\x80\xa6\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
正如Martijn Pieters在他们对该问题的评论中所说,这不是您想要做的事情,因为 Flask 开发服务器不是生产的好选择。最好在像 Gunicorn 这样的服务器上运行您的 Flask 应用程序并在那里设置超时。
但是无论如何要回答这个问题,Flask.run有一个 options 参数,允许您将选项传递到底层 Werkzeug 服务器:
run(host=None, port=None, debug=None, load_dotenv=True, **options)
Run Code Online (Sandbox Code Playgroud)
该相关WERKZEUG方法又具有request_handler参数允许你指定请求处理程序是怎样被使用:
werkzeug.serving.run_simple(hostname,
port,
application,
use_reloader=False,
use_debugger=False,
use_evalex=True,
extra_files=None,
reloader_interval=1,
reloader_type='auto',
threaded=False,
processes=1,
request_handler=None,
static_files=None,
passthrough_errors=False,
ssl_context=None
)
Run Code Online (Sandbox Code Playgroud)
这是用于提供实现所需超时策略的请求处理程序对象的钩子(此问题中探讨的主题:如何在 BaseHTTPServer.BaseHTTPRequestHandler Python 中实现超时)。
| 归档时间: |
|
| 查看次数: |
24446 次 |
| 最近记录: |