Elastic Beanstalk SciPy。*无声地失败

时间:2014-12-19 16:44:41

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

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

首先,应用程序: 该应用程序是一个简单的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 /路由,它本身并不使用scipy,它只会在响应时超时。如果我从模型中删除所有scipy导入,GET路由将毫无问题地响应,显然虽然POST路由将失败,但它在实际执行时没有要求。如果我只是在import scipy GET路线将起作用(由于某些要求不再陈述,模型将失败)。

所以只要有from scipy import ...,问题就会发生。应用程序将静默超时,日志中没有错误。

这让我感到有点失落,我们将非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:3)

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

  

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

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

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