2014-12-19 46 views
2

请原谅我,我正面临的这个问题有很多细微的差别,这使得它很难阐明。Elastic Beanstalk SciPy。*无提示失败

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

所以简单地说,唯一发生在application.py start上的是导入Flask和“model”.py,然后导入matplotlib,numpy和scipy的一些子组件。

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

问题: 问题出现在应用程序从任何SciPy子组件导入时开始。日志中没有错误,scipy安装正常并且满意。如果我尝试点击GET/route,它本身不使用scipy,它只是在响应中超时。如果我从模型中删除所有scipy的导入,GET路由将毫无问题地做出响应,显然尽管POST路由会失败,但它在实际执行时没有要求。如果我只是在import scipy GET路线将工作(仍然模型将失败,因为某些要求不再陈述)。

因此,如果有任何问题发生,那么from scipy import ...。应用程序将静默超时,日志中没有错误。

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

回答

3

的问题是与WSGI访问Python的编译器,请参阅:

尝试使用它对抗的GIL状态管理简化的API实现在任何子解释,除了一个用于Python的C扩展模块的后果首先,代码很可能会死锁或者崩溃。解决此问题的唯一方法是确保任何使用使用此API的C扩展模块的WSGI应用程序仅在初始化Python时创建的第一个Python子解释器中运行。

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

我已为这个问题的完整概述到我的博客: http://djm.io/deploying-scipy-into-aws-elastic-beanstalk/

+0

@ djmck我想我是唯一一个运行到这个!你知道这种方法是否仍然有效吗?我一直在尝试使用“Yum没有可用于安装的python-devel”。 – Pylander