Ocasional error de ctypes al importar números desde la aplicación mod_wsgi django

Aquí está la configuración:

  • Aplicación Django (1.2) en mod_wsgi que importa ctypes
  • Python 2.6.5
  • Apache 2.2.3
  • SELinux deshabilitado
  • RedHat EL 5 64bit
  • parte del sistema de archivos está montado sobre nfs

Ocasionalmente, cuando reinicio apache, obtengo un error de importación cuando se trata de importar ctypes. Cada solicitud entrante falla con un error 500 Si reinicio apache normalmente todo vuelve a funcionar.

Aquí está la traza de la stack del error:

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  import appfirst.main.models as FEmodels File "/home/appfirst/frontend/appfirst/main/models.py", line 27, in  import numpy, math, mpmath File "/usr/lib64/python2.6/site-packages/numpy/__init__.py", line 43, in  import ctypeslib File "/usr/lib64/python2.6/site-packages/numpy/ctypeslib.py", line 9, in  import ctypes File "/usr/lib64/python2.6/ctypes/__init__.py", line 546, in  CFUNCTYPE(c_int)(lambda: None) MemoryError 

Pensé que podría estar relacionado con este error, pero tengo desactivado SELinux, lo que pensé que significaría que este caso nunca podría ocurrir:

  • http://bugs.python.org/issue5504

¿Alguna sugerencia sobre cómo reproducirla consistentemente y / o arreglarla? ¡Esto realmente me está parando!

Me he encontrado con este error también. En mi caso, ocurre cuando ejecuto un script de Python desde un script de PHP que se ejecuta bajo Apache en un sistema Linux de 64 bits. [El código Python que se está ejecutando es el extremo frontal de un arenero pypy.] El mismo bit de código funciona bien en un sistema de 32 bits e incluso funciona bien cuando el script PHP se ejecuta directamente desde la línea de comandos. Mi “corrección” ha sido simplemente comentar esa línea “CFUNCTYPE (c_int) (lambda: Ninguna)” en ctypes / init .py. Es la última línea del archivo y está precedido por el siguiente comentario, que muestra que el progtwigdor tampoco entiende lo que está pasando.

 # 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) 

Claramente hay un problema más profundo en algún lugar de cpython, pero la solución funciona para mí.

Considere la posibilidad de desactivar SELinux. Debería resolver el problema.