Использование многопроцессорного модуля Python для загрузки моделей из базы данных BioModels

Я пытаюсь использовать многопроцессорный модуль Python для ускорения некоторых вычислений. Первым шагом является получение ряда моделей из базы данных BioModels. Для этого существует API, который называется BioServices, который можно загрузить с pip install bioservices, Мне удалось сделать это в сериале, но это требует времени и выиграет от распараллеливания.

bio=bioservices.BioModels() #initialize the class for downloading models
m=bio.getAllCuratedModelsId() #assign model ID's to the m (a python list)
def f(ID):
    dct={}
    name=bio.getModelNameById(ID)#retrieve the model name for the result dict key
    print 'running {}'.format(name) #print some information so you can see the program working
    dct[name]=bio.getModelSBMLById(ID) #get the model and assign as value in dct
    time.sleep(0.5) #stop the program for a bit to prevent bombarding the services and being cut out
    return dct
model_dct={}
P=multiprocessing.Pool(8)
for i in m:
    model_dct.update(P.map(f,i)) # parallelize

print time.time()-start+'seconds'

В настоящее время это просто инициализация биокласса и сбой (или, по крайней мере, бездействие). Кто-нибудь может подсказать, как исправить мой код?

Спасибо

1 ответ

Pool.map предназначен для применения функции ко всем элементам итерируемого, поэтому вы должны сказать:

for i in m:
    ...P.map(f,i)

а точнее просто

P.map(f, m)

Это даст вам список диктов, по одному на каждый ID.

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