在多重处理类中全局使用元组时遇到了一些问题。你知道吗
我的代码如下:
from multiprocessing import Pool
if __name__ == '__main__':
jj = ()
def f(x):
global jj
jj += (x*x,)
# Section A
#for ii in range(20):
# f(ii)
#print (jj)
# Section B
pool = Pool(processes=4)
pool.map(f, range(20))
pool.join()
print (jj)
如果我只运行B节,我得到的元组jj是一个空元组。然而,如果我只运行A部分,我会得到一个长度为20的元组。你知道吗
为什么会这样?你知道吗
好的,正如Python multiprocessing global variable updates not returned to parent所解释的,全局状态在进程之间是不共享的。你知道吗
例如,可以使用
multiprocessing.Queue
共享状态。你知道吗或者,您可以使用
print(tuple(sorted(items)))
以与Section A
生成相同的顺序获取值。4个进程正在处理Section B
中的任务,因此产生了“无序”结果。你知道吗相关问题 更多 >
编程相关推荐