51 votes

Multitraitement Python: autorisation refusée

Je reçois une erreur lorsque j'essaie d'exécuter un programme python utilisant un package de multitraitement:

   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
 

Il semble que l'utilisateur ne soit pas autorisé à accéder à la mémoire partagée. Lors de l'exécution avec les privilèges root, cela fonctionne bien.

Y at-il une solution pour l'exécuter en tant qu'utilisateur normal (pas root)?

Python version 2.6.2, le système d'exploitation correspond à Linux 2.6.18 (version 5.4 de CentOS) et à la machine VPS.

72voto

codeape Points 38576

Pour les sémaphores POSIX de travail, les utilisateurs ont besoin de r/w de l'accès à la mémoire partagée (/dev/shm).

Vérifiez les autorisations /dev/shm. Sur mon portable (Ubuntu), il ressemble à ceci:

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

Régler durablement les autorisations correctes (même après un redémarrage), ajoutez les lignes suivantes à votre /etc/fstab:

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

N'ai pas essayé cela, il suffit de copié à partir d'un post sur le forum.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X