簡體   English   中英

multiprocessing.Queue 奇怪的 python 行為

[英]multiprocessing.Queue weird python behavior

我堅持理解非常簡單的案例。 請有人解釋或顯示方向以理解以下內容:

import multiprocessing as mp

if __name__ == '__main__':
    input_queue = mp.Queue()
    for i in range(5):
        input_queue.put([i]*5)
    print(input_queue.qsize())
    while not input_queue.empty():
        o = input_queue.get()
        print(o)

Output:

5
[0, 0, 0, 0, 0]
[1, 1, 1, 1, 1]
[2, 2, 2, 2, 2]
[3, 3, 3, 3, 3]
[4, 4, 4, 4, 4]

但:

import multiprocessing as mp

if __name__ == '__main__':
    input_queue = mp.Queue()
    for i in range(5):
        input_queue.put([i]*5)
    # print(input_queue.qsize())
    while not input_queue.empty():
        o = input_queue.get()
        print(o)

Output 沒有

更新:

import multiprocessing as mp

if __name__ == '__main__':
    input_queue = mp.Queue()
    for i in range(5):
        input_queue.put([i]*5)
    for _ in range(5):
        o = input_queue.get()
        print(o)

打印預期 output。 所以可能會發出 in.empty() 方法。

python --version
Python 3.6.9 :: Anaconda, Inc.

你可能會打這個

在將 object 放入空隊列后,隊列的 empty() 方法返回 False 之前可能會有無限小的延遲

您可以嘗試在之前添加睡眠while not input_queue.empty():嗎?

import multiprocessing as mp
import time

if __name__ == '__main__':
    input_queue = mp.Queue()
    for i in range(5):
        input_queue.put([i]*5)
    # print(input_queue.qsize())
    time.sleep(1)
    while not input_queue.empty():
        o = input_queue.get()
        print(o)

如果上述方法有效,那么您在第一個示例中的print(input_queue.qsize())調用就是給隊列足夠的時間來腌制對象並開始在 empty() 調用上返回False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM