先原谅我,我面临的这个问题有很多细微的差别,很难表达。
**首先,应用程序:**该应用程序是一个简单的Flask应用程序。默认的GET /
路由将只返回一个对象响应(静态),并且不调用SciPy或Flask以外的任何其他库。然后有一个POST路由,如果使用正确的Schema调用该路由,则将运行一个模型(application.py从另一个本地文件导入到www.example.com)。该模型使用SciPy、Matplotlib和Numpy。
所以简单地说,在www.example.com启动时发生的唯一事情application.py就是导入Flask和“model”.py,后者依次导入matplotlib、numpy和scipy的一些子组件。
**EB环境:**它是一个Amazon Linux环境,位于运行Python 2.7的t2中型服务器上。服务前面有一个负载平衡器。
**问题:**问题出现在导入Scipy子组件时启动的应用程序中。日志中没有错误,scipy安装良好,并且令人满意。如果我尝试点击GET / route,它本身不使用scipy,它只是在响应时超时。如果我从模型中删除scipy的所有导入,GET路由将毫无问题地响应,显然,尽管POST路由将失败,但它在实际执行时没有要求。如果我只是在import scipy
,GET路由将工作(由于某些要求不再陈述,模型仍将失败)。
因此,只要有任何from scipy import ...
,这个问题就会发生。应用程序只会静默超时,日志中没有错误。
这让我有点不知所措,任何帮助或建议都将不胜感激!
1条答案
按热度按时间lymnna711#
这个问题与WSGI访问Python编译器有关,请参见:
尝试使用Python的C扩展模块(它是针对GIL状态管理的简化API在除第一个子解释器之外的任何子解释器中实现的)的后果是代码很可能死锁或使进程崩溃。解决此问题的唯一方法是确保任何使用此API的C扩展模块的WSGI应用程序,只在初始化Python时创建的第一个Python子解释器中运行。
您需要将
WSGIApplicationGroup %{GLOBAL}
添加到服务器上的wsgi.conf
文件中。我已经在我的博客上发布了这个问题的完整概述:http://djm.io/deploying-scipy-into-aws-elastic-beanstalk/