小编Ale*_*ang的帖子

如何在python中并行for循环?

更新1.0开始

看来打电话的时候

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不是引用,它复制了参数.所以,当XY非常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)

python parallel-processing gpu matrix matrix-factorization

5
推荐指数
0
解决办法
532
查看次数