偶然ctypes错误从mod_wsgi django应用程序导入numpy

时间:2010-09-21 16:51:49

标签: python django apache numpy ctypes

以下是设置:

  • 导入ctypes的mod_wsgi上的Django(1.2)app
  • Python 2.6.5
  • Apache 2.2.3
  • SELinux已停用
  • RedHat EL 5 64bit
  • 某些文件系统挂载在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,我认为这意味着这种情况永远不会发生:

有关如何一致地重现和/或修复它的任何建议?这真是让我感到难过!

2 个答案:

答案 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。 它应该解决问题。