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

Flask 如何在python中设置http请求超时,flask,Flask,如何使用Python Flask设置请求超时?我试图将Flask与其他框架进行比较,需要将超时配置为等效的 谢谢 WSGI服务器 WSGI是一种协议,一种将代码与运行它的实际web服务器分离的外观 在flask中,您只创建服务器的逻辑。运行时,您的Flask应用程序由WSGI服务器提供服务。最常见的是uWSGI(&nGinx代理外部世界和服务器之间的安全边界)。但是,您可以使用最适合您的WSGI服务器,而无需更改代码(nichol.as/benchmarkofpythonweb服务器)* Fla

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

谢谢

WSGI服务器 WSGI是一种协议,一种将代码与运行它的实际web服务器分离的外观

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

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

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

部署教程:

  • 烧瓶+wsgi:
  • 烧瓶+uwsgi+nginx:
超时 现在当我解释上下文时,回到你原来的问题。我会在您的中设置请求超时:

  • 测试客户端
  • 导入请求
    请求。获取('https://api.myapp.com,超时=3)
    
  • nGinx代理编码:
  • 正如他们在对这个问题的评论中所说的,这不是您想要做的事情,因为Flask开发服务器不是生产的好选择。最好在Gunicorn这样的服务器上运行flask应用程序,并在那里设置超时

    但无论如何,要回答这个问题,有一个options参数允许您将选项传递给底层的Werkzeug服务器:

    run(host=None, port=None, debug=None, load_dotenv=True, **options)
    
    反过来,具有请求处理程序参数,允许您指定要使用的请求处理程序:

    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
    )
    

    这是一个钩子,用于提供实现所需超时策略的请求处理程序对象(本问题中探讨的主题:)。

    您指的是什么超时?Flask本身实际上并不处理网络连接;这将留给运行它的WSGI服务器。有一个简单的WSGI服务器可以在开发时运行,但是基准测试没有什么意义。虽然这个链接可以回答这个问题,但是最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。@Ryu_CZ我完全同意Flask应用程序应该由WSGI服务器提供。但我认为,如果app.run()有“threaded=true”选项,Flask本身就能够同时处理多个请求。我想知道你到底说了什么,因为我现在面临性能问题。我正在设置WSGI服务器。@zono WSGI.multithread如果应用程序对象可能被同一进程中的另一个线程同时调用,则该值应为true,否则应为false。wsgi.multiprocess如果另一个进程可以同时调用等效的应用程序对象,则该值应为true,否则应为false。
    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
    )