有人可以帮我处理Python的并行处理吗?

时间:2015-04-20 10:26:16

标签: python parallel-processing

我正在寻找一种可能的解决方案来并行读取和触发数据(在我的情况下是波形数据)。

我有一个列表(wfpathlist),只是一个包含字符串的列表,这些字符串包含文件的给定路径:

for fn in wfpathlist:
    st = readWaveform(fn, bpfreq=[5.,30.])
    coinc = CoincidenceTimes(st)
    triggerlist += coinc.getCoincTimes()
    events += cutWithList(wfpath=fn, trigg=coinc.getCoincTimes(), 
    station=self.getStation())

readWaveform只是一个读取和过滤数据的简短函数:

def readWaveform(wfpath, bpfreq=[5., 30.]):
    st = read(wfpath)
    st.filter('bandpass', freqmin=bpfreq[0], freqmax=bpfreq[1])
    return st

对于只是对编程有一个非常基本的了解的人来说,是否有一个简单的解决方案让这个for循环并行运行?

非常感谢,

丹尼斯

1 个答案:

答案 0 :(得分:0)

您可以在函数中实现for循环,并使用multiprocessing.Pool()对象调用此函数。 这将并行化循环的执行,并应添加一个很好的加速。

示例:

from multiprocessing import Pool

def func(fn): 
    st = readWaveform(fn, bpfreq=[5.,30.])
    coinc = CoincidenceTimes(st)
    triggerlist += coinc.getCoincTimes()
    events += cutWithList(wfpath=fn, trigg=coinc.getCoincTimes(), 
    station=self.getStation())

if __name__ == '__main__':
    p = Pool(4) # if you have 4 cores in your processor
    p.map(func, wfpathlist)

来源:https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers

请注意,某些python实现的函数已经使用了多处理(numpy中常见),因此在执行此解决方案之前,应该在脚本运行时检查处理器活动。

编辑:我的不好,您应该直接将您的列表发送到池中。我更正了代码。