如何在python烧瓶中设置http请求超时

use*_*365 13 flask

如何使用Python Flask设置请求超时?我正在尝试将Flask与其他框架进行比较,并且需要将超时配置为等效.

谢谢!

Ryu*_*_CZ 5

WSGI服务器

\n\n

WSGI 是一种协议,是将您的代码与运行它的实际 Web 服务器分开的外观。

\n\n

在 Flask 中,您只创建服务器的逻辑。在运行时,您的 Flask 应用程序由 WSGI 服务器提供服务。最常见的是uWSGI (&nGinx代理到外部世界和您的服务器之间的安全边界)。但您可以使用最适合您的 WSGI 服务器,而无需更改代码 (nichol.as/benchmark-of-python-web-servers)*。

\n\n

Flask 本身仅随开发 WSGI Flask 服务器一起提供。这意味着服务器使用很多功能来帮助开发人员调试他们的应用程序。这些功能使得服务器速度非常慢。因此,当您在开发 WSGI Flask 服务器上对应用程序进行基准测试时,结果对您没有任何价值。

\n\n

另一方面,专门的生产就绪型 WSGI 服务器(包括 uWSGI)经过了良好的优化、测试和生产验证。大多数功能通常默认关闭,并允许您针对您的应用程序微调这些强大的功能。

\n\n

部署教程:

\n\n\n\n

暂停

\n\n

现在当我解释了上下文后,回到你原来的问题。我会在您的中设置请求超时:

\n\n
    \n
  1. 测试客户端
  2. \n
\n\n
import requests\nrequests.get(\'https://api.myapp.com\', timeout=3)\n<Response [200]>\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. nGinx代理环境:
  2. \n
\n\n
http\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}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。 (14认同)

Tom*_*ert 5

正如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 中实现超时)。