这个问题已经在这里有一个答案:
- 在不同的工人相同的输出在多处理 2个回答
请问内通过多进程调用的函数不同的一个numpy的ndarray功能的范围是什么? 下面是一个例子:
使用Python的多处理模块,我打电话像这样的功能:
for core in range(cores):
#target could be f() or g()
proc = mp.Process(target=f, args=(core))
jobs.append(proc)
for job in jobs:
job.start()
for job in jobs:
job.join()
def f(core):
x = 0
x += random.randint(0,10)
print x
def g(core):
#Assume an array with 4 columns and n rows
local = np.copy(globalshared_array[:,core])
shuffled = np.random.permutation(local)
调用f(core)
,则x
变量是本地的过程中,即 其打印效果与预期不同,随机整数。 这些从未超过10,说明x=0
中的每个过程。 那是对的吗?
调用g(core)
和置换所述数组的副本返回4相同地“改组”的阵列。 这似乎表明,工作副本不在本地子进程。 那是对的吗? 如果是的话,除了使用共享内存空间,是有可能有一个ndarray是本地的子进程时,需要从共享内存空间充满了吗?
编辑:
改变g(core)
添加一个随机整数似乎具有期望的效果。 该阵列的展会不同的值。 一定有什么在发生的permutation
是随机排序的列(本地为每个子进程)一样的...想法?
def g(core):
#Assume an array with 4 columns and n rows
local = np.copy(globalshared_array[:,core])
local += random.randint(0,10)
编辑II: np.random.shuffle
也表现出相同的行为。 所述阵列的内容被重排,但洗牌在每个核心的相同的值。