0

この質問への回答を直接適用したために、次の問題が発生しました。最小限の作業例 (MWE) では、myscriptいくつかの乱数を生成し、それらに対していくつかの操作を実行し、最終的に出力をファイルに書き込む場所が定義内にあります。このコードが並列化されていない場合、正しく動作します。ただし、並列の場合 ( 2 コア マシンでテストしていて、一度に 2 つのスレッドがある場合)、4 回の反復を実行したい場合 ( boot)、同じ出力が 2 回得られます (つまり、4 つの出力のうち、予想される 4 つではなく、2 つの異なる数字のみ)。これはどのように修正できますか?

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