배경 : 거대한 파일 .txt
을 처리해야합니다. 그것은 data mining
프로젝트입니다. 그래서 나는 많은 .txt
로 분할 한 각 하나 개 100MB
크기를 파일, 같은 디렉토리에 그들 모두를 구원하고 그들에게 이런 식으로 실행 관리 :파이썬 다중 처리 및 텍스트 파일 처리
from multiprocessing.dummy import Pool
과정에서
for filename in os.listdir(pathToFile):
if filename.endswith(".txt"):
process(filename)
else:
continue
, 내가 파일을 구문 분석을 객체 목록에 추가 한 다음 다른 함수를 적용합니다. 전체 파일을있는 그대로 실행하는 것보다 SLOWER입니다. 그러나 충분히 큰 파일을 위해 나는 즉시 달릴 수 없을 것이고 나는 슬라이스해야 할 것이다. 그래서 나는 각 process(filename)
이 끝날 때까지 기다릴 필요가 없으므로 실을 갖고 싶습니다.
어떻게 적용 할 수 있습니까? this을 확인했지만 코드에 적용하는 방법을 이해하지 못했습니다.
도움을 받으시기 바랍니다. 이 작업을 수행하는 방법은 here입니다. 내가 시도한 것 :
pool = Pool(6)
for x in range(6):
futures.append(pool.apply_async(process, filename))
불행히도 나는 처음 6 개의 텍스트 파일만을 처리 할 것인가? 그렇지 않을 것인가? 어떻게 작동시킬 수 있습니까? 스레드가 끝나면 다른 파일 텍스트를 할당하고 실행을 시작합니다.
편집 :
for filename in os.listdir(pathToFile):
if filename.endswith(".txt"):
for x in range(6):
pool.apply_async(process(filename))
else:
continue
루프의 모든 파일 이름을 전달하십시오. 6은 6 개의 파일이 동시에 처리됨을 의미합니다. 그러나 파이썬 길 (GIL)과 쓰레드 (thread) 때문에 속도를 높일 지 확신 할 수 없습니다. 대신 멀티 프로세싱을 고려해야합니다. –
스레드 풀이나 프로세스 풀에 대해 이야기하고 있습니까? – roganjosh
@roganjosh, 동일한 프로그램이므로 스레드 여야합니다. 그렇습니까? –