【问题标题】:Slow page loading on apache when using Flask使用 Flask 时在 apache 上加载缓慢的页面
【发布时间】:2018-09-03 09:42:12
【问题描述】:

问题

我正在使用装有 Apache 的笔记本电脑充当涉及 tensorflow 和 python 的本地项目的服务器,该项目使用用 Flask 编写的 API 来服务来自应用程序以及可能来自本地网络上的另一个用户的 GET 和 POST 请求。问题是,当我专门导入 tensorflow 或 tensorflow github 文件夹中研究文件夹中的对象检测文件夹时,初始页面一直在加载,而且它似乎永远不会完成,实际上是卡住了。我怀疑这个问题与包的大小有关,但在 Flask 提供的开发服务器上运行应用程序时,我没有遇到任何问题。

在尝试解决此问题时,我应该寻找任何指示吗?我检查了内存使用情况,它似乎并没有大幅上升,以及 CPU 使用率。

调试过程

我能够很快将基本的 hello world 打印到根页面,但我将问题隔离到导入发生卡住的地步。 我唯一能想到的是限制启动的线程数,但是当我在 httpd-mpm.conf 文件中将每个孩子的线程数限制为 5 并将连接数限制为 5 时,它没有帮助. 错误/访问日志并没有提供太多关于此事的信息。

几点说明:

到目前为止,我使用 Flask 的开发服务器启用了多线程来处理这些请求,但我发现它在连续运行 5 分钟后容易崩溃,所以我现在尝试使用 Apache 中的 wsgi 接口为了使用 Python 脚本。 我还应该注意,我不为 html 文件提供服务,只是基本的 GET 和 POST 请求。我只是使用浏览器查看它们。 如果有帮助,我也不使用虚拟环境。 我正在使用 Windows 10、Apache 2.4 和 mod_wsgi 4.5.24

【问题讨论】:

    标签: python apache tensorflow flask mod-wsgi


    【解决方案1】:

    tensorflow 模块是一个 C 扩展模块,可能无法实现,因此它可以在 Python 子解释器中正常工作。为了解决这个问题,强制您的应用程序在主要的 Python 解释器上下文中运行。详情在:

    【讨论】:

    • 谢谢,现在确实解决了这个问题。我很好奇,如果理论上多个人同时使用该服务,它是否可能会导致问题?正如我从简短的谷歌搜索中了解到的那样,首先拥有子流程的想法似乎是为每个模块提供环境隔离。
    • 子解释器不是子进程。它们仍然在相同的过程中运行,所以没有区别。在并发请求的上下文中,您的代码仍然必须是多线程安全的。无论是否使用子解释器都是如此。如果您的代码不能处理并发请求,那么在 Windows 上您将遇到问题,因为 Apache 支持的唯一并发模型是线程。您不能指定在单独的进程中处理请求。
    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多