gpt4 book ai didi

python - 如何在并行进程(python)中将项目 append 到列表?

转载 作者:行者123 更新时间:2023-11-28 17:13:18 26 4
gpt4 key购买 nike

这是我正在使用的更复杂代码的一个非常简单的版本。问题是我想将在 method() 函数中计算的项目 append 到我稍后可以显示的某个列表中。但是,当运行此代码时,列表对象为空,而结果数组已满。

    import multiprocessing as mp
global list
list = []
def add(thing):
list.append(thing)
def method():
global list
add(8) #doesn't work as wanted
return 7
def logResult(result):
results.append(result)

if (__name__ == '__main__'):
results = []
cpu = mp.cpu_count()
pool = mp.Pool(processes=cpu)
for x in range(0, 2000):
pool.apply_async(method,callback=logResult)
pool.close()
pool.join()
print list
print results

输出:

    []
[7,7,7,7,7,7,7,7,7....] and so on.

我知道 add 方法似乎是多余的,但是 method() 函数中的一个简单的 list.append() 也不起作用。 add 方法旨在反射(reflect) logResult 方法 ()。我明白为什么它不起作用,但我不知道如何解决这个问题。如果没有并行化,程序会按预期运行,但我的项目需要并行化,因为完成的计算比 method() 函数中的计算要繁琐得多。所需的输出将是

    [8,8,8,8,8,8,8,8,8,8,8,8,...]
[7,7,7,7,7,7,7,7,7,7,7,7,...] and so on.

提前致谢。

最佳答案

该列表应该驻留在共享内存中,以便可以从工作子进程访问。考虑 multiprocessing.Manager().list() .

关于python - 如何在并行进程(python)中将项目 append 到列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45944743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com