我有这段代码(这是我程序中的代码段):
python test.py
如果我用if test.value == X:
break
运行它,我没有输出,没有错误,没有任何错误。
我想在所有进程之间使用变量测试作为共享集成器,因此我可以在另一个进程中执行以下操作:
args=(i, test))
但有趣的是,如果我将args=(i, 1))
替换为Value()
,它将按预期工作。
所以我的问题是,为什么我不能将{{1}}对象传递给进程?我怎么能解决这个问题呢?
非常感谢。
答案 0 :(得分:1)
诀窍是使用multiprocessing.Manager,如此处所述:Sharing a result queue among several processes:
from multiprocessing import Process, Manager, cpu_count, Pool, Value, Lock
def grab_future_products(p, test):
print("Starting procces %s, value=%i" % (p, test.value))
if __name__ == "__main__": # Main program
n = 4
pool = Pool(processes=n) # n processes per every CPU core
m = Manager()
v = m.Value('i', 0)
for i in range(n):
res=pool.apply_async(grab_future_products, args=(i, v))
pool.close()
pool.join()