반응형
루프에 대한 다중 처리?
배열이 있습니다(호출).data_inputs
)는 수백 개의 천문학 이미지 파일의 이름을 포함합니다.그런 다음 이러한 이미지가 조작됩니다.내 코드는 작동하며 각 이미지를 처리하는 데 몇 초가 걸립니다.그러나 어레이를 실행하고 있기 때문에 한 번에 하나의 이미지만 수행할 수 있습니다.for
루프:
for name in data_inputs:
sci=fits.open(name+'.fits')
#image is manipulated
이미지를 먼저 수정해야 할 이유가 없는데, 각 코어가 다른 이미지의 for 루프를 통해 실행되는 상태에서 기계의 4개 코어를 모두 사용할 수 있습니까?
나는 그것에 대해 읽었습니다.multiprocessing
모듈이지만 제 경우에는 어떻게 구현해야 할지 잘 모르겠습니다.꼭 갖고 싶어요multiprocessing
작업하려면 결국 10,000개 이상의 이미지에서 이 작업을 실행해야 하기 때문입니다.
다음을 사용할 수 있습니다.
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])
를 사용하는 것이 좋습니다.imap_unordered
와 함께chunksize
를 사용하는 경우에만for
반복할 수 있도록 반복합니다.각 루프의 결과가 계산되는 즉시 반환됩니다.map
는 모든 결과가 계산될 때까지 대기하므로 차단됩니다.
언급URL : https://stackoverflow.com/questions/20190668/multiprocessing-a-for-loop
반응형
'programing' 카테고리의 다른 글
오라클 데이터베이스의 고유한 대/소문자 구분 안 함 제약 조건 (0) | 2023.08.27 |
---|---|
ASP.NET MVC - 느린 초기 로드 (0) | 2023.08.27 |
스위프트 하위 클래스 UIView (0) | 2023.08.27 |
여러 비동기 NSURL 연결 관리 (0) | 2023.08.27 |
오류: PHP의 simplexml_load_string을 사용하여 "입력이 올바른 UTF-8이 아닙니다. 인코딩을 표시하십시오!" (0) | 2023.08.27 |