Я не запускаю свой код для запуска, и, как и другие, у меня проблемы с пониманием того, как работает многопроцессорная обработка. Вот мой код до сих порPython многопроцессорность суммы
if __name__ == "__main__":
start = time.clock()
bins = np.linspace(0,5 * 2 ** 15, 2 ** 15, endpoint=False) # 1e3
t_full = np.linspace(0, 0.2, 2 * bins.shape[0], endpoint=False)
po = Pool()
res = po.map_async(timeseries, ((m, n, params, bins, 1, t_full, i, i + 1) for i in xrange(2 ** 15)))
signal = sum(res.get())
где таймсерия дается
def timeseries_para(m, n, params, bins, seed, t, sum_min, sum_max):
np.random.seed(seed)
PSD_data = PSD(m, n, params, bins)
dataReal = np.empty_like(PSD_data)
for i in range(bins.shape[0]):
dataReal[i] = np.random.normal(PSD_data[i], 0.1 * PSD_data[i])
plt.loglog(bins, dataReal, 'red')
dataCOS = np.sqrt(dataReal)
signal = np.zeros(t.shape[0])
## Calculating timeseries
#for i in range(bins.shape[0]):
for i in range(sum_min, sum_max):
#start = time.clock()
signal += dataCOS[i] * np.cos(2 * np.pi * t * bins[i] + random.uniform(0, 2 * np.pi))
#print time.clock() - start
return signal
Моя сумма идет от 0 до 2 ** 16, поэтому превышение скорости это вверх имеет важное значение. Моя проблема в том, что я сначала не знаю, как правильно назвать мою функцию и как я могу суммировать все свои ответы.
Спасибо за любой совет!
Что именно это вопрос? Не многопроцессорность, обеспечивающая прибыль, которую вы ищете? Или что именно не работает? –
Возможно, проблема связана с синтаксисом 'po.map_async', который не поддерживает несколько итераций. Таким образом, он кормит один кортеж args вашей функции, но ваша функция ожидает отдельных аргументов. Измените определение функции, чтобы принять один кортеж: 'def timeseries_para ((m, n, params, bins, seed, t, sum_min, sum_max))' – askewchan