Python многопроцессорная обработка и хранение данных

Я видел много примеров, когда я делаю почти то, что я пытаюсь сделать, но не совсем то, что мне нужно. У меня неприятно параллельный код, который я пытаюсь ускорить. Суть того, что я пытаюсь сделать, приведена ниже:

t=11
for k in range(100):
    for i in range(10000):
        for j in range(10000):
            s=t*i
    x[k] = s
    y[k] = s+3

Итак, я знаю большую часть того, что мне нужно сделать для многопоточности самого верхнего цикла из 100 повторов:

import multiprocessing  

def parAttempt(t):
    for i in range(10000):
        for j in range(10000):
            s=t*i
    x[k] = s
    y[k] = s+3

if __name__ == '__main__'

    pool = multiprocessing.Pool(processes=8)
    pool.map(parAttempt, range(100))

Что, я думаю, в основном верно. Однако я не знаю, как сделать две вещи. Во-первых, как мне правильно отправить его t и тот факт, что я хочу выполнить его 100 раз. И во-вторых, как мне сохранить x [k] и y [k] для 100 повторов, которые я пытаюсь сделать? Это просто что-то вроде:

x[k], y[k] = pool.map(parAttempt, range(100))

Что не может быть правильным, потому что k в этот момент не определено в коде.

Что такое x и y? Также - не могли бы вы описать здесь «более широкую картину» ... иногда многопроцессорность - это пустая трата времени / непрактична / приводит к более длинному коду без ускорения / потенциального замедления ... и т. д., Когда доступны другие решения.

Jon Clements 10.09.2018 11:10

Ну, в моем коде x - это одномерный массив numpy, который хранит вычисленные значения, а y - это двумерный массив numpy. Я делаю от 100 до 10000 реплик симуляций, ни одна из которых не зависит друг от друга. Многопоточность должна давать линейную скорость, я просто гораздо лучше знаком с Matlab, который здесь не подходит по многим причинам.

cloudbox 10.09.2018 11:31

Что-то с вашим примером явно не так. Как написано, ваш код даже не использует внутренний цикл или переменную j.

JohanL 21.09.2018 18:45
0
3
108
0

Другие вопросы по теме