다음 코드는 내 게으른 두 번째 CPU 코어가 작동하도록 작성했습니다. 코드는 기본적으로 디렉토리 계층 구조에서 원하는 "바다"파일을 찾은 다음 나중에 이진 "바다"파일을 처리하여 50에서 100 개의 텍스트 및 이진 파일을 생성하는 외부 스크립트 세트를 실행합니다. 문제의 제목은 처리 속도를 높이기 위해 병렬 방식으로 제안됩니다.멀티 프로세싱 작업자 풀 사용
이 질문은 "Cannot start ipcluster"이라는 제목의 IPython 사용자 목록에 대한 긴 토론에서 기인합니다. IPython의 병렬 처리 기능에 대한 나의 실험부터 시작한다.
이 코드는 올바르게 실행되지 않습니다. "바다"파일을 포함하는 폴더에 "바다"파일 만있는 경우 스크립트는 외부 스크립트 실행을 완전히 수행하지 않고 실행을 완료합니다. (30 ~ 50 개의 외부 스크립트가 있지만 외부 스크립트 체인에서 첫 번째 스크립트를 실행 한 후에 만 다중 처리가 가능합니다.) 흥미롭게도이 스크립트를 이미 처리 된 폴더 ("sea"파일 미리 처리하고 출력 파일은 이미 해당 폴더에 있음) 실행되면 선형 처리 타이밍과 관련하여 약 2.4 ~ 2.7X의 속도 향상을 얻습니다. 내 노트북에는 코어 2 듀오 2.5GHz CPU 만 있기 때문에 그다지 기대하지는 않습니다. CUDA 기반 GPU를 사용하고 있지만 현재의 병렬 컴퓨팅 문제와는 아무런 관련이 없습니다.
이 문제의 근원은 무엇이라고 생각하십니까?
모든 의견과 제안에 감사드립니다.
이1) 당신이 pathfiles을 인쇄 한 :
#!/usr/bin/env python
from multiprocessing import Pool
from subprocess import call
import os
def find_sea_files():
file_list, path_list = [], []
init = os.getcwd()
for root, dirs, files in os.walk('.'):
dirs.sort()
for file in files:
if file.endswith('.sea'):
file_list.append(file)
os.chdir(root)
path_list.append(os.getcwd())
os.chdir(init)
return file_list, path_list
def process_all(pf):
os.chdir(pf[0])
call(['postprocessing_saudi', pf[1]])
if __name__ == '__main__':
pool = Pool(processes=2) # start 2 worker processes
files, paths = find_sea_files()
pathfile = [[paths[i],files[i]] for i in range(len(files))]
pool.map(process_all, pathfile)
: 다음은 오류의 단지 부분이다. 표시된 바와 같이 IDL 실행은 혼란스럽고 올바른 결과를 얻을 수 없습니다. [gsever @ ccn partest] $ python proall3.py PID : 17722 PID : 17723 IDL 버전 7.1 (Linux x86 m32). (c) 2009, ITT 시각 정보 솔루션 IDL 버전 7.1 (linux x86 m32). (c) 2009, ITT Visual Information Solutions % 파일 상태를 가져올 수 없습니다. 단위 : 0, 파일 : 잘못된 파일 설명자 –