Python多处理:权限被拒绝

时间:2010-01-05 21:37:07

标签: 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

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

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

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

3 个答案:

答案 0 :(得分:65)

要使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

没有尝试过,只是从forum post复制。

答案 1 :(得分:3)

在我的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

希望这会有所帮助: - )

答案 2 :(得分:1)

一种无需重启的简单解决方案是

sudo chmod 777 /dev/shm

那解决了我的问题。