多处理时出现 OSError 38 [Errno 38]
- 2024-11-11 08:26:00
- admin 原创
- 168
问题描述:
我遇到了以下错误:
$ sudo chmod a+rwxt /dev/shm/
$ ls -ld /dev/shm/
drwxrwxrwt 2 root root 4096 Feb 4 06:56 /dev/shm/
$ python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import multiprocessing
>>> mp = multiprocessing.Pool(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/multiprocessing/__init__.py", line 227, in Pool
return Pool(processes, initializer, initargs)
File "/usr/lib/python2.6/multiprocessing/pool.py", line 84, in __init__
self._setup_queues()
File "/usr/lib/python2.6/multiprocessing/pool.py", line 131, in _setup_queues
self._inqueue = SimpleQueue()
File "/usr/lib/python2.6/multiprocessing/queues.py", line 328, in __init__
self._rlock = Lock()
File "/usr/lib/python2.6/multiprocessing/synchronize.py", line 117, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1)
File "/usr/lib/python2.6/multiprocessing/synchronize.py", line 49, in __init__
sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 38] Function not implemented
导致此错误的其他原因还有什么(除了对 /dev/shm 的读/写访问之外)?
谢谢!
解决方案 1:
对于从 Google 来到这里的任何人来说,答案都在Django Celery 实现 - OSError errno 38 - 未实现函数:
`none /dev/shm tmpfs rw,nosuid,nodev,noexec 0
0通过添加
/etc/fstab`并重新启动使其工作
无需重新启动,sudo mount /dev/shm
即可工作。
解决方案 2:
我怀疑这与以下事情有关:
http: //bugs.python.org/issue3770
来自 Python 文档:
警告:此软件包的部分功能需要主机操作系统上具有可正常运行的共享信号量实现。如果没有,模块
multiprocessing.synchronize
将被禁用,并且尝试导入它将导致 ImportError。有关更多信息,请参阅问题 3770。
这可能相关也可能不相关,因为它谈论的是multiprocessing.synchronize
,但据我所知,某些平台上的某些实现根本没有实现 python 所依赖的信号量 API,这可能是你的问题。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD