0

由于应用了这个问题的答案,直接出现了以下问题。在最小工作示例(MWE)中,myscript定义中有一个地方我生成一些随机数,然后对它们执行一些操作,最后将输出写入文件。当此代码未并行化时,它可以正常工作。但是,如果它是并行的(我在 2 核机器上测试它,并且一次有两个线程),当我想执行 4 次迭代(boot)时,我得到两倍的相同输出(即,在我得到的四个输出中只有两个不同的数字,而不是预期的四个)。如何解决这个问题?

MWE:

import random
import math
import numpy as np
import multiprocessing as mp
from multiprocessing import Pool

boot = 4
RRpoints = 278

def myscript(iteration_number):
    RRfile_name = "outputRR%d.txt" % iteration_number
    with open(RRfile_name, "w") as RRf:

        col1 = np.random.uniform(0 , 1 , RRpoints)
        col2 = np.random.uniform(0 , 1 , RRpoints)
        sph1 = [i * 2 * math.pi for i in col1]
        sph2 = [math.asin(2 * i - 1) for i in col2]

        for k in xrange(0 , RRpoints):
            h = 0           
            mltp = sph1[k] * sph2[k]
            h += mltp

        RRf.write("%s\n" % h)

x = xrange(boot)
p = mp.Pool()
y = p.imap(myscript, x)
list(y)
4

0 回答 0