私は現在、multiprocessing
モジュールを使用して、マルチスレッドの方法でいくつかのメソッドを実行するはずのクラスを作成しています。 n
の労働者のPool
を使用して実際の計算を実行します。現在、n
のアクティブワーカーのそれぞれに、0
とn
の間のインデックスを他の計算に割り当てるようにしました。これを行うために、共有されたQueue
を使用してインデックスを割り当てたいと思っていました。たびたび2人の従業員が同じ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()
このコードでは、実行は、第二のprint文の前に停止した - ので、私は何もデータが実際に書き込まれていないことを、考えてQueue
。 namespace
関連のものを削除すると、コードは完璧に機能します。これはmultiprocessing
オブジェクトの意図された動作ですか、何か間違っていますか?それとも何らかのバグですか?