以下是设置:
偶尔,当我重新启动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,我认为这意味着这种情况永远不会发生:
有关如何一致地重现和/或修复它的任何建议?这真是让我感到难过!
答案 0 :(得分:8)
我也遇到过这个错误。在我的情况下,当我在64位Linux系统上的Apache下运行的PHP脚本中执行Python脚本时,会发生这种情况。 [正在运行的Python代码是pypy沙箱的前端。]相同的代码可以在32位系统上正常运行,甚至可以直接从命令行执行PHP脚本。我的“修复”只是在ctypes / init .py中注释掉“CFUNCTYPE(c_int)(lambda:None)”这一行。它是文件的最后一行,后面是以下注释,表明程序员不明白发生了什么!
# XXX for whatever reasons, creating the first instance of a callback
# function is needed for the unittests on Win64 to succeed. This MAY
# be a compiler bug, since the problem occurs only when _ctypes is
# compiled with the MS SDK compiler. Or an uninitialized variable?
CFUNCTYPE(c_int)(lambda: None)
显然cpython中有一个更深层次的问题,但修复对我有用。
答案 1 :(得分:-2)
考虑关闭SELinux。 它应该解决问题。