IT이야기

for 루프 다중 처리

cyworld 2021. 4. 22. 21:13
반응형

for 루프를 다중 처리합니까?


data_inputs수백 개의 천문학 이미지 파일의 이름을 포함 하는 배열 ( )이 있습니다. 그런 다음 이러한 이미지를 조작합니다. 내 코드가 작동하고 각 이미지를 처리하는 데 몇 초가 걸립니다. 그러나 for루프를 통해 배열을 실행하기 때문에 한 번에 하나의 이미지 만 수행 할 수 있습니다 .

for name in data_inputs:
    sci=fits.open(name+'.fits')
    #image is manipulated

다른 이미지보다 먼저 이미지를 수정해야 할 이유가 없으므로 각 코어가 다른 이미지의 for 루프를 통해 실행되는 내 컴퓨터의 4 개 코어를 모두 활용할 수 있습니까?

multiprocessing모듈 에 대해 읽었 지만 제 경우에 구현하는 방법을 잘 모르겠습니다. multiprocessing결국 10,000 개 이상의 이미지에서이 작업을 실행해야하기 때문에 일하고 싶어합니다 .


다음을 간단히 사용할 수 있습니다 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

다음을 사용할 수 있습니다 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()

또는

with Pool() as pool: 
    pool.map(fits.open, [name + '.fits' for name in datainput])

참조 URL : https://stackoverflow.com/questions/20190668/multiprocessing-a-for-loop

반응형