OSError 38 [Errno 38]具有多处理功能

时间:2011-05-17 15:52:16

标签: python linux multiprocessing

我遇到以下错误:

$ 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的读/写访问权限)?

谢谢!

2 个答案:

答案 0 :(得分:19)

对于其他来自Google的人来说,答案是Django Celery Implementation - OSError errno 38 - Function not implemented

  

通过将none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0添加到/etc/fstab并重新启动

来实现目标

而不是重新启动,sudo mount /dev/shm可以正常工作。

答案 1 :(得分:5)

我怀疑这必须对此做些什么: http://bugs.python.org/issue3770

来自Python文档:

警告:此软件包的某些功能需要在主机操作系统上实现正常运行的共享信号量。没有一个,multiprocessing.synchronize模块将被禁用,尝试导入它将导致ImportError。有关其他信息,请参见问题3770。

这可能也可能没有关系,因为它讨论multiprocessing.synchronize,但据我所知,某些平台上的某些实现只是没有实现信号量API python依赖于此,这可能是你的问题