Как генерировать различный набор случайных чисел в каждой итерации распараллеленного цикла For?
Следующая проблема возникла непосредственно из-за применения ответа на этот вопрос. В минимальном рабочем примере (MWE) есть место в myscript
определение, где я генерирую некоторые случайные числа, затем выполняю некоторые операции с ними и, наконец, записываю вывод в файл. Когда этот код не распараллелен, он работает правильно. Однако, если он параллельный (я тестирую его на двухъядерной машине и имею два потока одновременно), когда я хочу выполнить 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)