尝试执行使用多处理程序包的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机器。
答案 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
那解决了我的问题。