对for循环使用多处理,Python

时间:2014-09-13 19:39:31

标签: python for-loop multiprocessing

我有一个for循环,它使用一些二进制条件,最后相应地写一个文件。我遇到的问题是,许多文件的条件都是正确的(有时需要写入大约1000个文件)。所以写它们需要很长时间(大约10分钟)。我知道我可以以某种方式使用Python multiprocessing并使用一些核心。

这是可行的代码,但只使用一个核心。

for i,n in enumerate(halo_param.strip()):
    mask = var1['halo_id'] == n
    newtbdata = tbdata1[mask]
    hdu = pyfits.BinTableHDU(newtbdata)
    hdu.writeto(('/home/Documments/file_{0}.fits').format(i))

我发现可以使用Pool中的multiprocessing来完成。

if __name__ == '__main__': pool = Pool(processes=4)

我想知道如何操作并使用至少4个核心。

1 个答案:

答案 0 :(得分:1)

将for循环体重构为函数,并将Pool.map与函数一起使用。

def work(arg):
    i, n = arg
    mask = var1['halo_id'] == n
    newtbdata = tbdata1[mask]
    hdu = pyfits.BinTableHDU(newtbdata)
    hdu.writeto(('/home/Documments/file_{0}.fits').format(i))

if __name__ == '__main__':
    pool = Pool(processes=4)
    pool.map(work, enumerate(halo_param.strip()))
    pool.close()
    pool.join()