반응형
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
반응형
'IT이야기' 카테고리의 다른 글
매번 열리는 성능 탐색기 비활성화 (0) | 2021.04.22 |
---|---|
object.presence의 포인트 (0) | 2021.04.22 |
jQuery datepicker- 2 개의 입력 / 텍스트 상자 및 제한 범위 (0) | 2021.04.21 |
Rails 기능 테스트에서 원시 포스트 데이터를 보내는 방법 (0) | 2021.04.21 |
Perl 프로그래머를위한 Python (0) | 2021.04.21 |