Python Многопроцессорный цикл for
У меня есть массив (называемый data_inputs), содержащий имена сотен файлов изображений астрономии. Затем эти изображения обрабатываются. Мой код работает и занимает несколько секунд для обработки каждого изображения. Однако он может выполнять только одно изображение за раз, потому что я запускаю массив через цикл "for":
for name in data_inputs:
sci=fits.open(name+'.fits')
#image is manipulated
Нет причин, по которым мне нужно изменить изображение перед любым другим, так можно ли использовать все 4 ядра на моей машине с каждым ядром, проходящим через цикл for на другом изображении?
Я читал о модуле многопроцессорности, но я не уверен, как его реализовать в моем случае.
Я очень хочу, чтобы многопроцессорная работа работала, потому что в конечном итоге мне придется запускать ее на 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) # proces 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()