'设备上没有留下空间#39;什么时候创建信号量?

时间:2015-02-28 23:43:25

标签: python macos filesystems multiprocessing

我最近开始在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相同的错误)

1 个答案:

答案 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尝试创建此信号量的位置。