Вложено для цикла с использованием multiprocessing.pool - PullRequest
0 голосов
/ 27 февраля 2019

Я должен использовать вложенный цикл for для конкретной проблемы, когда запускаются итераторы, и время для каждого запуска.Я пытаюсь провести его для разных значений гиперпараметра (здесь Т).Я пытаюсь распараллелить этот процесс (3 процесса), используя метод multiprocessing.pool.Но я не могу понять, как это реализовать.

def simulate(T,runs,time,param1, param2, param3, param4):
for i in tqdm(range(runs)):
    #Reset parameters
    for j in range(time):
        #Do some mathematics
#Some more mathematics
return (some output)

Как видно, количество параметров для функции много.Так что также я не уверен, как включить в functools.partial.Любые рекомендации?

1 Ответ

0 голосов
/ 27 февраля 2019

Если я вас правильно понял, вы хотите запустить метод simulate () с разными значениями T и сравнить результаты.Чтобы реализовать это с помощью многопроцессорной обработки, вам просто нужно настроить пул с нужным количеством процессов и использовать map для запуска вашей функции со списком значений T.Вам также нужно использовать partial, чтобы превратить вашу функцию из функции, которая принимает семь аргументов, в функцию, которая требует только одного, с постоянными значениями для остальных шести.Это важно, потому что map нужно знать, какой аргумент является изменяемым.Вот (непроверенный) пример:

import multiprocessing as mp
from functools import partial

# Create pool with desired number of processes
pool = mp.Pool( processes=3 )
# Make a partial function with preset values for params
partial_function = partial( simulate, runs=runs, 
   time=time, param1=param1, param2=param2, 
   param3=param3, param4=param4 )
# Dummy values for what T should be
options_for_T = [100, 200, 300, 400, 500, 600]
# Results will be a list of the output of simulate() for each T
results = pool.map( partial_function, options_for_T )

РЕДАКТИРОВАТЬ: я должен также указать, что использование tqdm здесь может быть контрпродуктивным, так как все ваши процессы будут общаться друг с другом

...