我有一个问题,我真的不知道从哪里开始解决。也许会给别人敲响警钟。在
TLDR:Django应用程序崩溃,重新启动后它会运行,但无法导入某些模块。重新启动后,一切又恢复正常。在
整个故事:
不同Python(2.5.x、2.6.x和2.6.x)和Django版本(分别为1.1.0、1.2.5和1.3.0)上的不同应用程序(我们现在最多有三个)偶尔会出现虚假的importer。例如,其中一个应用程序开始在每个请求中抛出一个ImportError:
from django.contrib.gis.maps.google import GMarker, GEvent
我们收集了strace
输出,相关的块在下面(为了简洁和保护有罪者,绝对路径被DIR替换)。在
(又是同一件事s/GMarker/GEvent/)
重新启动流程后,一切运行顺利,同时也在运行:
python -c 'from django.contrib.gis.maps.google import GMarker'
不会产生错误。在
GMarker和GEvent类实际上在django.contrib.gis.maps.google.overlays
中定义并导入到...maps/google/__init__.py
:
from django.contrib.gis.maps.google.gmap import GoogleMap, GoogleMapSet
from django.contrib.gis.maps.google.overlays import GEvent, GIcon, GMarker, GPolygon, GPolyline
from django.contrib.gis.maps.google.zoom import GoogleZoom
所以完全可以预料到GMarker.py公司等等。会失败的。Python似乎忘记了__init__.py
及其名称空间。在
这些应用程序的流量相对较高,可以想象(虽然不确定)它们可能已经超过了虚拟机的限制,恢复得几乎很优雅。另外,至少在两个案例中,应用程序出现了导致崩溃的早期问题——一个是SIGSEGV,还有一个是err。。。另一个里面有其他东西)。一个应用程序的重启就导致它到处乱扔importer,而另一个程序又让它重新运行起来。损坏的.py[c]?时间戳是古老的。在
所有这些应用程序都运行在从wsgi到fastcgi服务器上。在
到目前为止,每个应用程序都失败过一次(在完全不同的模块中,__init__.py
“被遗忘”的两种情况,但我找不到第三个错误ATM),因此我无法判断这些模块是否有意义。在
任何和所有的建议和想法感谢!在
实际上,您的strace行没有任何帮助;这些访问并没有导致模块被导入。在
这种导入错误可能有多种原因:
如果你把第二组斜线粘贴起来,我们就更接近于解了?在
更新
对于2。我是说,如果你有两个文件的结构如下
在食品/初始化.py:
在棒.py/初始化.py:
^{pr2}$在snafu.py公司名称:
在好的。好的公司名称:
运行pythonsnafu.py得到一个崩溃和类似的strace输出,运行python好的。好的一切正常。在
strace的输出在我看来很可疑:
我想知道这个}?在
DIR
部分。您是否可能在某个地方键入了PYTHONPATH变量,而使用了DIR
而不是{我建议你把进口包装起来试试。。。除了ImportError,添加一个代码来执行类似的操作(任何记录而不是打印的代码都可以)
这会让你明白发生了什么。在
相关问题 更多 >
编程相关推荐