Многопроцессорность Python: отказ от прав
Я получаю сообщение об ошибке при попытке выполнить программу python, которая использует пакет многопроцессорности:
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
Похоже, что у пользователя нет разрешения на доступ к общей памяти. При выполнении с привилегиями root он отлично работает.
Есть ли какое-либо решение для запуска его как обычного пользователя (не root)?
Python версии 2.6.2, ОС - Linux 2.6.18 (версия CentOS 5.4) и машина VPS.
Ответы
Ответ 1
Чтобы семафоры POSIX работали, пользователям нужен r/w-доступ к общей памяти (/dev/shm
).
Проверьте разрешения на /dev/shm
. На моем ноутбуке (Ubuntu) это выглядит так:
$ ls -ld /dev/shm
drwxrwxrwt 2 root root 40 2010-01-05 20:34 shm
Чтобы навсегда установить правильные разрешения (даже после перезагрузки), добавьте следующее в свой /etc/fstab
:
none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0
Не пробовал это, просто скопировал из сообщения .
Ответ 2
В моем OVH VPS Classic эта ошибка была вызвана циклом в /dev/shm и/run/shm.
Оба были символическими ссылками, связанными друг с другом.
Итак, как root, вот что я сделал:
# rm /dev/shm
# mkdir /dev/shm
# chmod 777 /dev/shm
# nano /etc/fstab
Затем я изменил строку shm:
none /dev/shm tmpfs rw 0 0
To:
none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0
Перезагрузили сервер... И это исправило проблему!
В качестве альтернативы вы можете установить shm вручную:
# mount /dev/shm
Надеюсь, что это поможет: -)
Ответ 3
Одно простое решение без перезагрузки
sudo chmod 777 /dev/shm
Это решило мою проблему.