我最近开始在Macbook Pro(OS X 10.10)上使用Python观察到以下错误。根据磁盘实用程序,120 GB SSD驱动器中大约有一半仍然可用,所以我怀疑这与磁盘有关,而与其他一些文件系统属性无关?
哪些因素控制信号量可用的空间量?我该怎么做才能解决这个问题?
$ python -c 'import multiprocessing; multiprocessing.Semaphore()'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/rmcgibbo/miniconda/envs/3.4.2/lib/python3.4/multiprocessing/context.py", line 81, in Semaphore
return Semaphore(value, ctx=self.get_context())
File "/Users/rmcgibbo/miniconda/envs/3.4.2/lib/python3.4/multiprocessing/synchronize.py", line 127, in __init__
SemLock.__init__(self, SEMAPHORE, value, SEM_VALUE_MAX, ctx=ctx)
File "/Users/rmcgibbo/miniconda/envs/3.4.2/lib/python3.4/multiprocessing/synchronize.py", line 60, in __init__
unlink_now)
OSError: [Errno 28] No space left on device
(注意,这似乎并不依赖于python的版本。与2.7.9相同的错误)
答案 0 :(得分:2)
根据MacOSX manuals,用于创建信号量的sem_open
系统调用可能会因ENOSPC而失败:
[ENOSPC] O_CREAT is specified, the file does not exist, and there is insufficient space available to create the semaphore.
我建议您使用dtruss
找出Python尝试创建此信号量的位置。