0

我正在尝试使用 python 多处理模块来加速一些计算。第一步是从 BioModels 数据库中获取一些模型。有一个称为 BioServices 的 API,可以使用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'

目前这只是初始化 bio 类并崩溃(或至少什么都不做)。有人可以建议如何修复我的代码吗?

谢谢

4

1 回答 1

0

Pool.map旨在将函数应用于可迭代的所有项目,因此您应该说:

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

而只是

P.map(f, m)

这将为您提供一个字典列表,每个 ID 一个。

于 2016-11-12T22:48:38.933 回答