내 CPU의 단일 코어를 사용하여 파일을 처리하려고합니다. 하지만 단일 코어를 사용하는 것으로는 충분하지 않다고 생각합니다. 대신, 내 시스템의 여러 코어에 액세스 할 수 있다면 프로세스를 더 빠르고 더 빠르게 실행할 수 있습니다.다중 스레드를 사용하여 python3을 사용하여 파일 처리하기
하지만 유감스럽게도 단일 코어만을 사용하여 파일을 처리하는 것을 알고 있습니다.
data = open('datafile','r',encoding='ascii',errors='ignore')
for line in data.readlines():
splitted = line.lower().strip().split()
check = process(splitted[0],splitted[1])
if check == '':
pass
data.close()
은 내가 별도로 line
을 복용하고 원하는대로 출력을 가져 오는 동안 TEH process()
처리를위한 CPU의 전체 용량을 사용할 수있는 방법을 알고 싶어 여기에 내가 무슨 짓을? 처리 중에 쓰레드의 교착 상태를 피할 수있는 방법조차도 프로세스 출력에 위험 할 수 있습니다.
저와 함께 의견을 공유하십시오.
교착 상태가 발생합니까? 교착 상태에는 적어도 하나 이상의 잠금 장치가 필요합니다. 파이썬에는 GIL이라는 것이 있기 때문에 다중 코어를 사용하는 유일한 방법은 스레드 대신 프로세스를 사용하는 것입니다. 이제는 병렬 디스크 io가 성능을 향상시킬 수도 있고 늘리지 않을 수도 있습니다 (디스크에 따라 다름). 그래서 나는'multiprocesing.Pool'을 사용하고 병렬 처리를 위해 주 프로세스에서 파일의 "청크"를 보내도록 제안합니다. – freakish
@freakish 파일을 청크로 다이빙하면 느슨한 데이터가 될 수 있습니다. 원하지 않는 데이터는 전체 데이터를 유지하는 것이 중요합니다. –
왜 데이터가 손실됩니까? 줄 단위로 줄을 읽고 각 줄을 자식 프로세스로 보냅니다. 여기에는 데이터 손실이 없습니다. – freakish