如何获得多处理的最大大小.队列



与队列相反。对多处理进行排队。队列似乎没有maxsize属性。当我试图通过调用queue_object.maxsize来获得最大大小时,我得到了以下异常:AttributeError: 'Queue' object has no attribute 'maxsize'

这是我的一个实现错误,还是实际上不存在?如果它不存在,还有其他方法可以获得这些信息吗?

如何复制:

Python 3.7.6 (v3.7.6:43364a7ae0, Dec 18 2019, 14:18:50) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from multiprocessing import Queue
>>> q = Queue(maxsize=10)
>>> q.maxsize
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Queue' object has no attribute 'maxsize'

编辑:正如下面的答案所解释的,不支持此属性,这让我想到了为什么会出现这种情况?我相信多重处理。队列基于队列。确实支持该属性的队列(这首先导致了混乱(。

multiprocessing.Queue复制queue.Queue的API文档。它不需要复制实现细节。

queue.Queue实例的maxsize属性是未记录的实现细节。前面没有下划线并不能使它公开。用户从未打算与此属性进行交互。不能保证它将存在于所有Python实现中,也不能保证它会存在于未来的版本中。(例如,如果queue模块获得了C实现,那么这个属性很可能会消失。(

获得multiprocessing.Queue的最大大小的方法是跟踪创建对象时传递的值。如果您决定直接将其从队列对象中取出,并且可以访问实现详细信息(就像在queue.Queue中对maxsize所做的那样(,则可以访问当前实现使用的私有属性:

queue._maxsize

不能保证这将在未来的版本或其他Python实现中起作用。

我找到了一个解决方法,可以在多处理的源代码中看到,属性被设置为私有属性。因此,为了访问它,可以简单地执行queue_object._maxsize。不过,这不是一个优雅的解决方案,我想知道为什么要以这种方式实现它。

Python 3.7.6 (v3.7.6:43364a7ae0, Dec 18 2019, 14:18:50) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from multiprocessing import Queue
>>> q = Queue(maxsize=10)
>>> q._maxsize
10

最新更新