多处理队列maxsize限制为32767

Jas*_*ram 13 python queue multiprocessing max-size

我正在尝试使用多处理编写Python 2.6(OSX)程序,并且我想填充一个超过默认值32767项的Queue.

from multiprocessing import Queue
Queue(2**15) # raises OSError
Run Code Online (Sandbox Code Playgroud)

Queue(32767)工作正常,但任何更高的数字(例如Queue(32768))都失败了OSError: [Errno 22] Invalid argument

这个问题有解决方法吗?

Jim*_*nis 4

一种方法是用multiprocessing.Queue自定义类包装您的类(仅在生产者端,或从消费者的角度透明地)。使用它,您可以对要分派到您正在包装的对象的项目进行排队,并且仅在空间可用时Queue将本地队列(Pythonlist()对象)中的内容提供到队列中,并在队列已满时进行异常处理以进行限制。multiprocess.QueueQueue

这可能是最简单的方法,因为它对其余代码的影响应该最小。自定义类的行为应该像队列一样,同时隐藏multiprocessing.Queue抽象背后的底层。

(一种方法可能是让您的生产者使用线程,一个线程来管理从线程Queue到您的调度multiprocessing.Queue,而任何其他线程实际上只是提供线程Queue)。