多处理 for 循环?
- 2025-04-16 08:56:00
- admin 原创
- 24
问题描述:
我有一个名为 的数组,data_inputs
其中包含数百张天文图像文件的名称。然后对这些图像进行操作。我的代码可以正常工作,处理每张图像需要几秒钟。但是,由于我正在循环运行该数组,因此它一次只能处理一张图像for
:
for name in data_inputs:
sci=fits.open(name+'.fits')
#image is manipulated
我没有理由先修改一个图像,然后再修改其他图像,那么是否可以利用我机器上的所有 4 个核心,每个核心在不同的图像上运行 for 循环?
我读过关于这个multiprocessing
模块的文章,但不确定如何在我的情况下实现它。我迫不及待地想开始multiprocessing
实践,因为最终我需要在超过 10,000 张图像上运行它。
解决方案 1:
您可以简单地使用multiprocessing.Pool
:
from multiprocessing import Pool
def process_image(name):
sci=fits.open('{}.fits'.format(name))
<process>
if __name__ == '__main__':
pool = Pool() # Create a multiprocessing Pool
pool.map(process_image, data_inputs) # process data_inputs iterable with pool
解决方案 2:
您可以使用multiprocessing.Pool
:
from multiprocessing import Pool
class Engine(object):
def __init__(self, parameters):
self.parameters = parameters
def __call__(self, filename):
sci = fits.open(filename + '.fits')
manipulated = manipulate_image(sci, self.parameters)
return manipulated
try:
pool = Pool(8) # on 8 processors
engine = Engine(my_parameters)
data_outputs = pool.map(engine, data_inputs)
finally: # To make sure processes are closed in the end, even if errors happen
pool.close()
pool.join()
解决方案 3:
或者
with Pool() as pool:
pool.map(fits.open, [name + '.fits' for name in datainput])
解决方案 4:
如果您仅使用循环来迭代可迭代对象,我建议使用imap_unordered
with 。它会在每个循环计算完成后立即返回结果。with会等待所有结果计算完成,因此会造成阻塞。chunksize
`for`map
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD