2016-06-15 1 views
0

그래서 간단한 파이썬 프로그램을 사용하여 컴퓨터의 각 파일 이름을 반복하여 이미지 파일 유형이나 파일 유형을 확인했습니다.Faster For Loops Python

for i in drives: 
    for root, dirs, files in os.walk(str(i.replace("\\","\\\\"))): 
     #print(root,dirs) 
     for file in files: 
      if file.endswith(".jpeg"): 
       pictures.append(file) 

당신이이 작업을 가속화 GPU에 어떻게든지 또는 당신이 날 지점 수 있다면 나는 (나는 그들이 내가 모르는이 둥지를 호출 생각) 루프 그룹에 대한 간단한을 사용하고 궁금 볼 방향을 바꿔 다른 방향으로 효율성을 높일 수 있습니다. 키워드에 대한 파일 경로 검색에 관한 질문이 있었지만 효율성을 향상시킬 방법을 묻는 질문에 유의하십시오.

+3

도움이 수를 당신은 할 수 없습니다 정말 GPU 가속 * 디스크 I/O * – kindall

+1

여기서 병목 현상은 디스크 I/O입니다. 소프트웨어에서는 아무 것도 할 수 없습니다. – BlackBear

답변

1

디스크 I/O의 제한으로 인해 실제로 개선 할 수있는 부분은 없습니다. (주석 상태로). 그러나 os.walk(...)을 사용하는 대신 os.scandir(...)을 사용하면 속도를 조금 더 높일 수 있습니다. 이 링크를 참조하십시오 : https://www.python.org/dev/peps/pep-0471/

+0

os.scandir 모듈을 살펴 보았지만 출력에 대한 참조를 찾을 수없는 것 같습니다. 함수의 walk 함수와 비슷합니까? – waudy

+0

생성자 객체를 반환합니다. 그것은 약간의 어셈블리가 필요합니다 (즉, 재귀 적으로 반복하려는 경우 자체 재귀 함수를 만들어야합니다). 그러나 사용하는 경우 상당히 빠릅니다. 문서에 따르면 2 배에서 20 배까지 빨라질 수 있습니다. – Brian

0
당신은 당신이 얻을 것이다 ... 당신이 첫 번째 줄에 드라이버에 의해 스레드와 다른 하나 개의 스레드를 사용할 수 있습니다

가 빠른

q = Queue() 
for i in drives: 
    t = Thread(target=your_method, args=(q,pictures)) 
    t.daemon = True 
    t.start() 
q.join() 

희망이

+0

이 방법을 사용하면, 그는 "pictures"에 뮤텍스를 넣어야합니다. 그렇지 않으면 경쟁 조건이 생겼습니다. – Brian