我正在尝试使用多处理编写一个 Python 2.6 (OSX) 程序,并且我想用超过默认值 32767 个项目填充一个队列。
from multiprocessing import Queue
Queue(2**15) # raises OSError
Queue(32767)
工作正常,但任何更高的数字(例如 Queue(32768)
)都会失败并显示 OSError: [Errno 22] Invalid argument
这个问题有解决方法吗?
最佳答案
一种方法是用自定义类包装您的 multiprocessing.Queue
(仅在生产者端,或者从消费者的角度来看是透明的)。使用它,您可以将要分派(dispatch)到您正在包装的 Queue
对象的项目排队,并且只将本地队列(Python list()
对象)中的东西送入multiprocess.Queue
随着空间变得可用,当 Queue
已满时进行异常处理以节流。
这可能是最简单的方法,因为它对其余代码的影响应该最小。自定义类的行为应该像 Queue 一样,同时将底层 multiprocessing.Queue
隐藏在您的抽象之后。
(一种方法可能是让您的生产者使用线程,一个线程来管理从线程 Queue
到您的 multiprocessing.Queue
的分派(dispatch),而任何其他线程实际上只是喂养线程 Queue
).
关于python - 多处理队列最大限制为 32767,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900985/