Извиняюсь за неоднозначное название, я не уверен, как кратко описать мою проблему.
Для простоты я написал очень короткий тестовый код, который демонстрирует мою проблему.Я пытаюсь использовать многопроцессорную обработку для создания большого набора данных, который будет использоваться с plt.imshow для создания тепловой карты.
Тестовый код выглядит следующим образом (и игнорируйте тот факт, что я использую только пул 1, как я уже сказал, это только для демонстрационных целей):
import numpy as np
import multiprocessing
G_list = [1,2,3]
r = 6
def test(G):
D = np.cos(G)
E = r*2
return G, D, E
pool = multiprocessing.Pool(1)
r_list = []
for i in range(5):
r += 1
r_list.append(r)
print r_list
for i in range(len(r_list)):
r = r_list[i]
output = pool.map(test,G_list)
print output
Целью этого кода было вычисление значений D и E для трех значений G в G_list, за исключением того, что я хочу это сделатьэто для диапазона значений для г.Поскольку pool.map () не принимает функцию с несколькими входами, я попытался просто поместить команду pool.map () в цикл for, который изменяется на r.Результат, однако, таков:
[7, 8, 9, 10, 11]
[(1, 0.54030230586813977, 6), (2, -0.41614683654714241, 6), (3, -0.98999249660044542, 6)]
[(1, 0.54030230586813977, 6), (2, -0.41614683654714241, 6), (3, -0.98999249660044542, 6)]
[(1, 0.54030230586813977, 6), (2, -0.41614683654714241, 6), (3, -0.98999249660044542, 6)]
[(1, 0.54030230586813977, 6), (2, -0.41614683654714241, 6), (3, -0.98999249660044542, 6)]
[(1, 0.54030230586813977, 6), (2, -0.41614683654714241, 6), (3, -0.98999249660044542, 6)]
Как вы можете видеть, G изменяется pool.map (), как и ожидалось, но значение r одинаково в каждом цикле, несмотря на то, что оно выполняетсяизменяется с каждым циклом непосредственно перед вызовом pool.map ().Мой вопрос заключается в том, как я могу предотвратить использование pool.map () значения r, глобально определенного в верхней части, и заставить его использовать значение, которое я меняю для каждого цикла?
Python 2.7, большое спасибо!