이전 글에서 작성했던 코드를 개선하는 작업을 진행했다.

우선 실행 속도를 개선 시기키 위해 스토리지 api 호출 및 파일 입출력을 비동기적으로 실행시키기 위해

쓰레드를 사용하였다.

 

실행시 ignore 인자를 추가했다. 해당 인자에 파일 폴더의 이름을 입력하면,

해당 파일 및 폴더는 제외된 상태로 리스트가 작성된다.

 


 

변경점

 

작업 분할

각각의 쓰레드에 작업을 분할하기 위해 1차원 배열을 길이가 일정한 2차원 배열로 변환하는 코드를 작성하였다.

지정된 값에 맞추어 2차원 배열을 생성하고 배열 내부의 배열(일정한 길이의 문자열)을 각각의 쓰레드에 전달하였다.

 

 

 

작업 실행

파일 생성, 파일 삭제에 맞추어 각각 작업목록(2차원배열)을 생성하고 현재의 focus에 맞추어 쓰레드가 실행시킬 함수들을 설정하였다.

파일 생성, 삭제 리스트를 순회하며 쓰레드를 생성하였고, 마찬가지로 쓰레드를 담은 배열을 순회하며 실행시켰다.

 

 

 

작업 시각화

기존에 사용했던 tqdm 모듈을 사용하여 시각화를 진행했다.

파일 생성 리스트(업로드, 다운로드)와 파일 삭제 리스트(로컬파일 삭제, 스토리지 파일 삭제)에 각각 tqdm객체를 생성했다.

 

각각의 tqdm 모듈은 thread가 생성될 때 전달되는 인자로 정의하였다.

thread가 실행하는 함수에서 tqdm모듈을 받아 진행상황이 업데이트 되도록 작성하였다.

 

 

 


 

사용 화면

약 20개의 파일, 실행시간 2초

 

 

문제점들

 

파일 변경을 감지하지 못하는 문제: 파일이 이미 존재할 경우 파일이 변경되었어도 파일의 변경사항을 적용하지 않는 문제가 있다.

 

개선 예정

hash값을 이용해 파일의 변경내역을 파악할 예정이다.

 

 

전체 코드

https://github.com/mannamman/namthplaygroundblog/tree/main/project/local_to_gcp_storage_v2/thread