OSError 38 [Errno 38] с многопроцессорной обработкой
У меня возникла следующая ошибка:
$ 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
, но из того, что я понимаю, некоторые реализации на некоторых платформах просто не реализуют API-интерфейс семафора API, который может быть вашей проблемой.