默认情况下,python 的多处理队列是“无限”的吗?

Geo*_*rge 6 python python-multithreading python-3.x python-multiprocessing python-3.6

python 的多处理队列的文档:https : //docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue

不像 queue.Queue 那样清楚:https ://docs.python.org/3/library/queue.html

当 maxsize 参数没有提供给构造函数时,关于队列的大小是否是“无限的”(例如,在程序可以设法分配内存的任何可能范围内)。

是这样吗?

Meg*_*Ing 5

multiprocessing.Queuequeue.Queue完全模仿所有特征(除了.task_done().join()

Queue 实现了 Queue.Queue 的所有方法,除了 task_done() 和 join()。

所以没有参数(或负数)它可以采用无限元素

(作为旁注,因为队列在内部像结构(dequeue, heapq, list)一样列表,所以很难有限制,然后没有限制。)

编辑:

好吧,在查看源代码后发现,multiprocessing.Queue如果没有指定值,它确实有一个标准的上限:2**31-1

# file multiprocessing/queues.py
class Queue(object):
    def __init__(self, maxsize=0, *, ctx):
        if maxsize <= 0:
            from .synchronize import SEM_VALUE_MAX as maxsize # -> 2**31-1
Run Code Online (Sandbox Code Playgroud)

所以它不是无限的,而是实际无限的