将值(“i”,0)传递给进程

2024-04-24 20:19:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码(它是我程序中的片段):

from multiprocessing import Process, Manager, cpu_count, Pool, Value, Lock

def grab_future_products(p, test):
    print("Starting procces %s" % p)

if __name__ == "__main__": # Main program
    n = 4
    test = Value('i', 0)
    pool = Pool(processes=n) # n processes per every CPU core

    for i in range(n):
        pool.apply_async(grab_future_products, args=(i, test))

    pool.close()
    pool.join()

如果我用python test.py运行它,就没有输出,没有错误,什么都没有。 我想使用变量test作为所有进程之间的共享整数,这样我就可以在另一个进程中执行如下操作:

if test.value == X:
    break

但有趣的是,如果我用args=(i, 1))替换args=(i, test)),它将按预期工作。 所以我的问题是,为什么我不能将Value()对象传递到进程中?我怎样才能解决这个问题? 非常感谢。你知道吗


Tags: 代码fromtest程序if进程valueargs
1条回答
网友
1楼 · 发布于 2024-04-24 20:19:05

诀窍是使用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()

相关问题 更多 >