0
파이썬에서 병렬 처리를 처음 사용합니다. 나는 모든 디렉토리를 거쳐 모든 tar.gz 파일의 압축을 풀 수있는 아래 코드를 가지고있다. 그러나, 그것은 꽤 시간이 걸립니다.파일 압축 해제를위한 파이썬 병렬 처리
import tarfile
import gzip
import os
def unziptar(path):
for root, dirs, files in os.walk(path):
for i in files:
fullpath = os.path.join(root, i)
if i.endswith("tar.gz"):
print 'extracting... {}'.format(fullpath)
tar = tarfile.open(fullpath, 'r:gz')
tar.extractall(root)
tar.close()
path = 'C://path_to_folder'
unziptar(path)
print 'tar.gz extraction completed'
나는 다중와 JOBLIB 패키지의 일부 게시물을 통해 찾고있다하지만, 난 여전히 병렬로 실행하는 내 스크립트를 수정하는 방법을 명확 V 아니에요. 어떤 도움을 주셔서 감사합니다.
편집 : @tdelaney는 도움을
덕분에, 놀라운 점은 수정 된 스크립트 (60mins는 원래 스크립트 30 분에 비교) 모든 압축을 풉니 다 두 배의 시간이 걸렸된다!
작업 관리자를 보면 멀티 코어를 사용하는 동안 CPU 사용량이 낮음을 알 수 있습니다. 왜 이렇게되는지 나는 잘 모르겠다.
오, 나는 당신의 예가 마침내 일을 분명히한다고 생각합니다 ~ lemmi가 스크립트를 시험해보십시오! – Jake
흠, 오류가 있습니다 : "SyntaxERror : 구문이 잘못되었습니다." "pool.map (unziptar, my_files, chunksize = 1)"이유를 아십니까? – Jake
아, cos, 닫는 괄호 ... 한 번 더 질문 할 수 있습니까? Windows에서 실행 중이며 스크립트가 방금 미쳐서 ~ "if __name__ == '__main__': freeze_support()"를 추가하라는 메시지가 계속 표시됩니다. 메시지는 "현재 프로세스가 booststrapping 단계를 완료하기 전에 새 프로세스를 시작하려고 시도합니다." 이것을 구현하는 방법을 알고 있습니까? 도움을 다시 한번 주셔서 감사합니다. – Jake