Итак, если итерации независимы, то я не вижу смысла итерации по count=500
. В любом случае вам может быть интересна многопроцессорная библиотека .
Я подготовил 2 решения-заглушки (т.е. изменив ваши точные потребности). Первый предполагает, что каждый вход является статическим (насколько я понимаю, изменения в решениях возникают из-за генерации случайных состояний внутри каждой итерации). Со вторым вы можете обновить входные данные между итерациями i
. Я не пробовал код, так как у меня нет model
, поэтому он может не работать напрямую.
import multiprocessing as mp
# if everything is independent (eg. "infectionList" is static and does not change during the iterations)
def worker(model, infectionList):
sirs = []
for it in model.get_nodes():
sir = model.infected_SIR_MODEL(it, infectionList, False)
sirs.append(sir)
return sirs
count = 500
infectionList = []
model = "YOUR MODEL INSTANCE"
data = [(model, infectionList) for _ in range(1, count+1)]
with mp.Pool() as pool:
results = pool.starmap(worker, data)
Второе предлагаемое решение, если в каждой итерации обновляется «fectionList »или что-то еще«i»:
def worker2(model, it, infectionList):
sir = model.infected_SIR_MODEL(it, infectionList, False)
return sir
with mp.Pool() as pool:
for i in range(1, count+1):
data = [(model, it, infectionList) for it in model.get_nodes()]
results = pool.starmap(worker2, data)
# process results, update something go to next iteration....
Изменить: Обновлен ответ для более четкого разделения предложений.