我似乎找不到 _multiprocessing.SemLock.SEM_VALUE_MAX 的值
试试这个:
python -c "import _multiprocessing; import platform; print platform.platform(), _multiprocessing.SemLock.SEM_VALUE_MAX"
目前找到的具体值(请相应编辑和更新):
# OSX 10.9.5
Darwin-13.4.0-x86_64-i386-64bit 32767
# Linux Mint Qiana
Linux-3.13.0-24-generic-x86_64-with-LinuxMint-17-qiana 2147483647
# Fedora
Linux-3.10.0-123.20.1.el7.x86_64-x86_64-with-fedora-21-Twenty_One 2147483647
# Ubuntu Trusty
Linux-3.13.0-45-generic-x86_64-with-Ubuntu-14.04-trusty 2147483647
# Debian 8
Linux-2.6.32.46-i686-with-debian-8.0 2147483647
这可能是 suggest 改进文档的一个很好的案例。如果你能这么好。
文档提示
我在文档中找不到任何说明负值含义的内容
它实际上是平台相关的,使用上面的命令获取实际值。
虽然maxsize 上似乎没有针对multiprocessing 的文档,但标准库的Queue 文档提供了以下内容:
如果 maxsize 小于或等于零,则队列大小是无限的。
和multiprocessing's guide 声明
Queue 类几乎是 Queue.Queue 的克隆。
因此我认为可以公平地假设您的解释是正确的,即创建操作系统可能支持的最大队列。实际上,我们不必再回到假设,这是事实:
血淋淋的细节
如果您想了解在编译时如何确定_multiprocessing.SemLock.SEM_VALUE_MAX 的详细信息,请继续阅读。
是否有任何文档阐明了这个神奇的价值?
不——如果你真的想知道,你必须按照代码...对于CPython,有这些#include文件multiprocessing.h和平台C库的limits.h,后者最终被@987654326包含@。换言之,SEM_VALUE_MAX 的设置取决于主机平台。
根据 Open Group 关于 limits.h 的文档,它被定义为
信号量可能具有的最大值。可接受的最小值:_POSIX_SEM_VALUE_MAX
所以_POSIX_SEM_VALUE_MAX 是最小值,它又被定义为:
信号量可能具有的最大值。价值:32767