我目前正在创建一个类,该类应该使用该multiprocessing
模块以多线程方式执行某些方法。Pool
我使用一个n
工人执行真正的计算。现在我想为每个当前n
活跃的工作人员分配一个索引0
,n
用于其他计算。为此,我想使用 sharedQueue
以某种方式分配索引,即每次都没有两个工人具有相同的 id。为了在不同线程之间共享Queue
类内部相同的内容,我想将其存储在Manager.Namespace()
. 但是这样做,我遇到了一些问题Queue
。因此,我创建了我的问题的最小版本,并最终得到了这样的结果:
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
s 对象的预期行为吗?我做错了什么吗?或者这是某种错误?