我目前創建這是應該在一個多線程的方式執行一些方法中,使用multiprocessing
模塊的類。我使用n
工作人員的Pool
執行實際計算。現在,我想每個當前n
活躍職工的分配0
和n
之間的索引其他一些計算。爲此,我希望使用共享的Queue
以某種方式分配索引,即每次都沒有兩個工作人員具有相同的ID。要在不同線程之間共享類Queue
,我想將它存儲在Manager.Namespace()
中。但是這樣做,我在Queue
上遇到了一些問題。因此,我創造了我的問題的最小版本,並結束了這樣的事情:多的內部Manger.Namespace隊列()
from multiprocess import Process, Queue, Manager, Pool, cpu_count
class A(object):
def __init__(self):
manager = Manager()
self.ns = manager.Namespace()
self.ns.q = manager.Queue()
def foo(self):
for i in range(10):
print(i)
self.ns.q.put(i)
print(self.ns.q.get())
print(self.ns.q.qsize())
a = A()
a.foo()
在這段代碼,執行第二打印語句之前停止 - 因此,我認爲,沒有數據實際寫入Queue
。當我刪除namespace
相關的東西時,代碼完美無瑕。這是multiprocessing
的對象的預期行爲,我做錯了什麼?或者這是一種錯誤?