저는 프로그래밍에 익숙하지 않으며 프로그램이 느려지는 이유를 이해하지 못합니다.Python 3.3 대 루프 중에 느려짐
약 350,000 - 500,000 행의 데이터 세트로 작업 중이며 어떤 방향으로 고맙게 생각합니다.
이전 항목을 업데이트하고 완전히 새로운 항목을 목록 끝에 추가하려면 새 목록의 모든 항목을 이전 항목과 대조해야합니다.
인쇄 명령문이 재 할당 루프에 추가되고 새로운 행 예외가 발생하면 처음 몇 천 번의 반복이 빠르지 만 프로그램이 매우 느리게됩니다. (처음 3 초 동안 거의 1000 개의 완전한 루프가 실행되고 약 20,000 회 반복 된 후 5 초 안에 100 개의 전체 루프보다 속도가 느려지고 60,000 회 반복으로 15 초 이내에 100 개의 완전한 루프보다 느려집니다.)
RAM은 70 % 미만 사용량과 CPU는 48와 50 % 사이에서 일정하게 유지하고있다한다
코드는 다음과 같습니다:
목록 목록의 각import gc
gc.disable() #this was added to possibly improve speed
def updateOldList(oldListOfLists, newListOfLists):
oldListIndexDict = dict()
IDNumber = <index of ID number>
for i in range(len(oldListOfLists)):
oldListIndexDict[oldList[i][IDNumber]] = i
for i in range(len(newListOfLists)):
try:
oldIndex = oldListIndexDict[newListOfLists[i][IDNumber]]
oldListOfLists[oldIndex][0] = newListOfLists[i][0]
oldListOfLists[oldIndex][3] = newListOfLists[i][3]
del(oldListIndexDict[newListOfLists[i][IDNumber]]) #this was added to limit the number of entries in the hash table to attempt to improve speed
except:
oldListOfLists= oldListOfLists + newListOfLists
return oldListOfLists
내부 목록을 주문한 상태를 유지해야 그래서 나는 세트를 사용할 수 있다고 생각하지 않습니다.
다음 두 질문은 매우 유사하여 묻기 전에 설명을 시도/검토했습니다. 나는 천천히 실행 코드가있는 경우
python function slowing down for no apparent reason
Python function slows down with presence of large list
'gc.disable()'을 제거하면 어떻게 될까요? 똑같다? – zch
그것이 내가 원래 가지고 있었던 방법입니다, 그것을 추가함으로써 작은 이득이있었습니다. – user2308425
bare except : 절을 사용하지 마십시오. 숨어있는 버그를 잡으려는 항목을 정확히 나열하십시오. 언뜻 보면 내 오래된 걱정거리는 오래된 루프 + 새로운 라인이 루프 반복마다 크고 큰리스트를 복사하고 파괴한다는 것입니다. 대신 old.extend (new)를 사용하십시오. – gps