Python многопроцессорность при l oop, возврат и добавление выходов - PullRequest
1 голос
/ 31 марта 2020

У меня есть концептуально простой код, который я хочу распараллелить, но все остальные потоки, о которых я узнал, слишком сложны, и я не понимаю, как применять их в моем случае, или даже если они применимы.

В моем коде функция с несколькими аргументами вызывается через некоторое время l oop и возвращает и выходные данные, и условие выхода из l oop. Я хочу распараллелить время l oop. Я использую Python 3.7.3.

Вот упрощенный пример:

import multiprocessing as mp
import numpy as np
import time

def foo(i, arg1, arg2):
    n = np.random.rand()
    n = arg1*n + arg2
    if n > 0.9:
        stop = True
    else:
        stop = False
    return [i, n], stop

if __name__ == '__main__':
    i = 0
    stop = False
    output = list()
    while not stop:
        out, stop = foo(i, 1, 0)
        i = i + 1
        if not stop:
            output.append(out)
    print(np.asarray(output))

Вывод:

[[ 0.          0.25295033]
 [ 1.          0.53795096]
 [ 2.          0.48774803]
 [ 3.          0.09281972]
 [ 4.          0.75053227]
 [ 5.          0.30367072]
 [ 6.          0.57043762]
 [ 7.          0.4589554 ]
 [ 8.          0.33231446]
 [ 9.          0.76805717]
 [10.          0.22486246]
 [11.          0.69499273]
 [12.          0.67616563]]

РЕДАКТИРОВАТЬ. Я хотел бы "поднять" эту ветку, потому что это то, что мне действительно нужно, и я не могу сделать это самостоятельно. Мета-этикет говорит, что я должен редактировать, добавляя ценность к вопросу, но я не думаю, что мог бы добавить что-то еще: мне просто нужно распараллелить представленный код. Буду очень признателен за любые (практические) отзывы.

...