看来打电话的时候
for i, Wi in enumerate(W.T):
idx.append(i)
result.append(pool.apply_async(ALS_Y, (X, Wi, Q, lambda_, n_factors, i,)))
Run Code Online (Sandbox Code Playgroud)
传递给函数的参数ALS_Y/ALS_X不是引用,它复制了参数.所以,当X或Y非常large matrixes,例如,在我的情况下,它是6000*40左右(并且它是a for-loop,让我们假设迭代次数是50 000,所以......) ,它超出了记忆的极限.
然后我尝试使用全局参数,只是将索引作为参数传递给函数,
import multiprocessing
import time
import numpy as np
def func(idx):
global a
a[idx] += 1
if __name__ == "__main__":
a=range(10)
for j in xrange(2):
pool = multiprocessing.Pool(processes=8)
result = []
for i in xrange(10):
result.append(pool.apply_async(func, (i, )))
pool.close()
pool.join()
print a
print "Sub-process(es) done."
Run Code Online (Sandbox Code Playgroud)
它输出:`
[0, …Run Code Online (Sandbox Code Playgroud)