Многопроцессорность Python: отказ от прав - программирование
Подтвердить что ты не робот

Многопроцессорность 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.

4b9b3361

Ответ 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

Это решило мою проблему.