有人能帮我做Python的并行处理吗?

2024-03-29 07:13:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个可能的解决方案,读取和触发数据(在我的情况下波形数据)并行。你知道吗

我有一个列表(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循环并行运行?你知道吗

多谢了

丹尼斯


Tags: 数据字符串列表for情况解决方案fnst
1条回答
网友
1楼 · 发布于 2024-03-29 07:13:24

可以在函数中实现for循环,并使用多处理池()对象。 这将使循环的执行并行化,应该会增加一个很好的加速。你知道吗

示例:

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中很常见),所以在实现这个解决方案之前,应该在脚本运行时检查处理器的活动。你知道吗

编辑:我不好,你应该直接把你的名单发送到游泳池。我更正了密码。你知道吗

相关问题 更多 >