【发布时间】:2010-09-21 16:51:49
【问题描述】:
设置如下:
- 在 mod_wsgi 上导入 ctypes 的 Django (1.2) 应用程序
- Python 2.6.5
- Apache 2.2.3
- SELinux 已禁用
- 红帽 EL 5 64 位
- 部分文件系统挂载在 nfs 上
有时,当我重新启动 apache 时,我会在尝试导入 ctypes 时遇到导入错误。每个传入的请求都会失败,并出现 500 错误。如果我重新启动 apache,通常一切都会重新开始工作。
这是错误的堆栈跟踪:
Traceback (most recent call last):
File "/home/appfirst/django/django/core/handlers/base.py", line 80, in get_response
response = middleware_method(request)
-------------- A BUNCH OF DJANGO MIDDLEWARE STUFF HERE -------------
File "/home/appfirst/django/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/appfirst/backend/backend/streamer/views.py", line 6, in <module>
import appfirst.main.models as FEmodels
File "/home/appfirst/frontend/appfirst/main/models.py", line 27, in <module>
import numpy, math, mpmath
File "/usr/lib64/python2.6/site-packages/numpy/__init__.py", line 43, in <module>
import ctypeslib
File "/usr/lib64/python2.6/site-packages/numpy/ctypeslib.py", line 9, in <module>
import ctypes
File "/usr/lib64/python2.6/ctypes/__init__.py", line 546, in <module>
CFUNCTYPE(c_int)(lambda: None)
MemoryError
我认为这可能与这个错误有关,但我关闭了 SELinux,我认为这意味着这种情况永远不会发生:
关于如何始终如一地重现和/或修复它有什么建议吗?这真是难倒我!
【问题讨论】:
-
考虑到回溯终止的位置,阻止分配内存的东西 PROT_WRITE 和 PROT_EXEC 似乎是最有可能的罪魁祸首。你确定你的系统上没有其他东西可以提供这种保护吗?
-
我有几乎相同的设置,同样的问题,除了错误对我来说是一致的。重新启动 Apache 并不能解决我的问题。
-
我们基本上通过不使用 numpy 解决了这个问题。自从删除了 numpy 导入后,我们再也没有看到它。我们并没有经常使用 numpy,所以我们只是编写了自己的替代品。
标签: python django apache numpy ctypes