【问题标题】:Elastic Beanstalk SciPy.* fails silentlyElastic Beanstalk SciPy.* 静默失败
【发布时间】:2014-12-19 16:44:40
【问题描述】:

提前原谅我,我面临的这个问题有很多细微差别,难以表达。

首先是应用程序: 该应用程序是一个简单的 Flask 应用程序。默认的GET / 路由只会返回一个对象响应(静态),并且不会调用 SciPy 或除 Flask 之外的任何其他库。然后有一个 POST 路由,如果使用正确的 Schema 调用它将运行一个模型(从另一个本地文件导入到 application.py)。该模型利用 SciPy、Matplotlib 和 Numpy。

简单地说,在 application.py 启动时唯一发生的事情就是导入 Flask 和“model”.py,然后导入 matplotlib、numpy 和 scipy 的一些子组件。

EB 环境: 它是运行 Python 2.7 的 t2 中型服务器上的 Amazon Linux 环境。服务前面有一个负载均衡器。

问题: 当导入任何 SciPy 子组件时,问题就出现在应用程序中。日志中没有错误,scipy 安装良好并且很满意。如果我尝试访问本身不使用 scipy 的 GET / 路由,它只会在响应中超时。如果我从模型中删除所有 scipy 导入,则 GET 路由将毫无问题地响应,但显然 POST 路由将失败,因为它在实际执行时没有要求。如果我只是在import scipy GET 路由将起作用(由于不再说明某些要求,模型仍然会失败)。

因此,只要有任何from scipy import ...,就会出现问题。应用程序将静默超时,日志中没有错误。

这让我有点茫然,任何帮助或建议将不胜感激!

【问题讨论】:

    标签: python amazon-web-services scipy amazon amazon-elastic-beanstalk


    【解决方案1】:

    问题在于 WSGI 访问 Python 编译器,请参阅:

    尝试使用 Python 的 C 扩展模块(该模块是针对除第一个之外的任何子解释器中的 GIL 状态管理的简化 API 实现的)的后果是代码可能会导致进程死锁或崩溃。解决这个问题的唯一方法是确保任何使用 C 扩展模块的 WSGI 应用程序都只在 Python 初始化时创建的第一个 Python 子解释器中运行。

    您需要将WSGIApplicationGroup %{GLOBAL} 添加到服务器上的wsgi.conf 文件中。

    我已在我的博客上发布了对此问题的完整概述: http://djm.io/deploying-scipy-into-aws-elastic-beanstalk/

    【讨论】:

    • @djmck 我以为我只是遇到这个问题的人!你知道这种方法是否仍然有效吗?我一直在尝试“Yum 没有可用于安装的 python-devel”。
    猜你喜欢
    • 2021-09-25
    • 2017-08-03
    • 2017-08-27
    • 2021-08-15
    • 2014-10-27
    • 2015-12-15
    • 2019-04-20
    • 2015-12-17
    • 2017-05-04
    相关资源
    最近更新 更多