python - 多处理队列最大限制为 32767

标签 python queue multiprocessing max-size

我正在尝试使用多处理编写一个 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/

相关文章:

python - 在 Flask Admin 中用富文本编辑器替换 textarea

C++队列多线程等待作业完成

python - 池.apply_async() : nested function is not executed

Python 多处理 + 日志记录挂起

Python itertools 多处理

python - aws cdk 将值传递给 lambda 自定义资源

python - 无法导入 numpy : AttributeError: type object 'numpy.ndarray' has no attribute '__array_function__'

python - 使用 GitPython 检查本地 Python 相对于远程的状态

java - Queue 接口(interface)的 add() 和 Offer() 方法之间的区别

java - 不使用二叉树或递归来迭代文件系统