是python的多处理队列"无限"默认情况下?

时间:2018-05-10 09:30:54

标签: python python-3.x python-3.6 python-multiprocessing python-multithreading

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

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

关于队列的大小是否为"无限" (当在没有给出构造函数的maxsize参数时,在程序可以设法分配内存的可能范围内)。

是这样的吗?

1 个答案:

答案 0 :(得分:4)

multiprocessing.Queue完全模仿queue.Queue所有功能(.task_done().join()除外)

  

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

因此,如果没有参数(或负数),它可以采用无限元素

(作为旁注,因为队列在内部列出了类似结构(dequeueheapqlist),因此更难获得限制,然后没有限制。 )

编辑:

好的,因为在查看源代码后结果是,如果没有指定值,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

所以它不是infinte,而是praticly infinte