OSError 38 [Errno 38] with multiprocessing
I'm having the following error:
$ 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
What else could be the reason for this error (apart from read/write access to /dev/shm)?
Thanks!
For anyone else coming here from Google, the answer is at Django Celery Implementation - OSError errno 38 - Function not implemented:
Got it working by adding
none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0
to/etc/fstab
and rebooting
Instead of rebooting, sudo mount /dev/shm
works.
I suspect this have to do something with this: http://bugs.python.org/issue3770
From the Python docs:
Warning: Some of this package’s functionality requires a functioning shared semaphore implementation on the host operating system. Without one, the multiprocessing.synchronize
module will be disabled, and attempts to import it will result in an ImportError. See issue 3770 for additional information.
This may or may not be related, since it talks about multiprocessing.synchronize
, but from what I understand, some implementations on some platforms just don't implement the semaphore API python relies upon here, which might be your problem.