2010-01-05 42 views
47

estoy recibiendo un error al intentar ejecutar el programa en Python que utiliza el paquete de multiprocesamiento:Python multiproceso: Permiso denegado

File "/usr/local/lib/python2.6/multiprocessing/__init__.py", line 178, in RLock 
    return RLock() 
    File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 142, in __init__ 
    SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1) 
    File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 49, in __init__ 
    sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue) 
OSError: [Errno 13] Permission denied 

Parece que el usuario no tiene permiso para acceder a la memoria compartida. Al ejecutar con privilegios de root, funciona bien.

¿Hay alguna solución para ejecutarlo como usuario normal (no root)?

Python versión 2.6.2, OS es Linux 2.6.18 (CentOS versión 5.4) y es máquina VPS.

Respuesta

62

Para que los semáforos POSIX funcionen, los usuarios necesitan el acceso R/W a la memoria compartida (/dev/shm).

Compruebe los permisos a /dev/shm. En mi portátil (Ubuntu) se ve así:

$ ls -ld /dev/shm 
drwxrwxrwt 2 root root   40 2010-01-05 20:34 shm 

Para establecer de forma permanente los permisos correctos (incluso después de un reinicio), añada lo siguiente a su /etc/fstab:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 

no han probado este , simplemente copiado de forum post.

+0

Oh, gracias, el cambio de permisos para/dev/shm ayudado. –

+11

El uso de 'none/dev/shm tmpfs rw, nosuid, nodev, noexec 0 0' en'/etc/fstab' funciona pero es más seguro. Ver p. https://bugzilla.redhat.com/show_bug.cgi?id=664457 – Day

+0

Recibí el mismo error cuando traté de ejecutar Minecraft-Overviewer en Fedora 14. ¡Esta pregunta y el comentario de @ Day fueron de gran ayuda! –

3

En mi OVH VPS Classic, este error fue causado por un bucle en/dev/shm y/run/shm. Ambos eran enlaces simbólicos que se vinculan entre sí. Así como root aquí es lo que hice:

# rm /dev/shm 
# mkdir /dev/shm 
# chmod 777 /dev/shm 
# nano /etc/fstab 

Luego modificó la línea de SHM:

none /dev/shm tmpfs rw 0 0 

Para:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0 

reinicia el servidor ... Y que fija ¡el problema! alternativa, se puede montar manualmente SHM:

# mount /dev/shm 

Esperanza esto ayuda :-)