请事先原谅我,我面临的这个问题有很多细微差别,难以表达。
首先,应用程序:
该应用程序是一个简单的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 ...
,问题就会发生。应用程序将静默超时,日志中没有错误。
这让我感到有点失落,我们将非常感谢任何帮助或建议!
答案 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/