与队列相反。对多处理进行排队。队列似乎没有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