我有一个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个核心。
答案 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()