Python多处理:权限被拒绝

Rom*_*giy 49 python linux

我在尝试执行使用多处理包的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
Run Code Online (Sandbox Code Playgroud)

看起来用户没有访问共享内存的权限.使用root权限执行时,它可以正常工作.

是否有任何解决方案以普通用户(非root用户身份)运行它?

Python版本2.6.2,操作系统是Linux 2.6.18(CentOS版本5.4),它是VPS机器.

cod*_*ape 65

要使POSIX信号量工作,用户需要r/w访问共享内存(/dev/shm).

检查权限/dev/shm.在我的笔记本电脑(Ubuntu)上它看起来像这样:

$ ls -ld /dev/shm
drwxrwxrwt 2 root root          40 2010-01-05 20:34 shm
Run Code Online (Sandbox Code Playgroud)

要永久设置正确的权限(即使重启后),请将以下内容添加到/etc/fstab:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0
Run Code Online (Sandbox Code Playgroud)

没试过这个,只是从论坛帖子中复制过来.

  • 在`/ etc/fstab`中使用`none/dev/shm tmpfs rw,nosuid,nodev,noexec 0 0`仍然有效,但更安全.参见例如https://bugzilla.redhat.com/show_bug.cgi?id=664457 (12认同)

Gab*_*ocq 5

在我的 OVH VPS Classic 中,此错误是由 /dev/shm 和 /run/shm 中的循环引起的。两者都是相互链接的符号链接。所以作为root,我是这样做的:

# rm /dev/shm
# mkdir /dev/shm
# chmod 777 /dev/shm
# nano /etc/fstab
Run Code Online (Sandbox Code Playgroud)

然后我修改了 shm 行:

none /dev/shm tmpfs rw 0 0
Run Code Online (Sandbox Code Playgroud)

到:

none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0
Run Code Online (Sandbox Code Playgroud)

重新启动服务器......问题解决了!或者,您可以手动挂载 shm:

# mount /dev/shm
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :-)