Многопроцессорная обработка Python: в доступе отказано - PullRequest
49 голосов
/ 06 января 2010

Я получаю сообщение об ошибке при попытке запустить программу на 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-машина.

Ответы [ 3 ]

65 голосов
/ 06 января 2010

Для работы семафоров POSIX пользователям необходим прямой доступ к общей памяти (/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

Не пробовал, просто скопировал из сообщения на форуме .

3 голосов
/ 06 ноября 2014

В моем 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

Кому:

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

Перезапустил сервер ... И это решило проблему! В качестве альтернативы вы можете смонтировать shm вручную:

# mount /dev/shm

Надеюсь, это поможет: -)

1 голос
/ 12 декабря 2018

Одно простое решение без перезагрузки -

sudo chmod 777 /dev/shm

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...