paramiko 질문
조회수 331회
sftp로 파일을 불러와 신구 대조를 통해 차이점을 찾고 싶습니다. 폴더안의 파일이 7만개가 넘어 한번 불러올 때마다 시간이 너무 오래 걸립니다
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port=port, username=username, password=password)
sftp = ssh.open_sftp()
sftp.chdir(asm)
asm_list_dir1 = sftp.listdir() # 오래 걸리는 부분
asm_list_dir1 = set(asm_list_dir1)
time.sleep(sec)
asm_list_dir2 = sftp.listdir() # 오래 걸리는 부분
asm_list_dir2 = set(asm_list_dir2)
diff = list(asm_list_dir2 - asm_list_dir1).sort()
제너레이터를 통해 시간을 줄여보려고 했습니다만 시간순으로 정렬이 안 돼 오래걸리긴 마찬가지 입니다. 제너레이터는 정렬 기능도 없는 거 같습니다
test = sftp.listdir_iter()
print(next(test))
print(next(test).filename)
>>> -rw-r--r-- 1 1017 1018 1593 17 Oct 15:30 foss_asm_2210171530577273.xml
>>> foss_asm_2210171518597189.xml
글작성하는 시점(11월1일)에 불러온 파일의 생성시간은 약 2주전(10월17일)입니다.
읽기전용으로 사용하고 있고 다른 부서에서 관리하고 있어 폴더를 생성하기는 어렵습니다. 시간을 줄일 수 있는 방법이 있을까요?
걸리는 시간
start = time.process_time() # timeit.Timer()
asm_list_dir1 = set(sftp.listdir())
end = time.process_time() # timeit.Timer()
print("Time elapsed: ", end - start) # seconds
Time elapsed: 1.09375
start = time.perf_counter() # time.process_time()
asm_list_dir2 = set(sftp.listdir())
end = time.perf_counter() # time.process_time()
print("Time elapsed: ", end - start) # seconds
Time elapsed: 12.542309400000022
cli 접속으로 걸리는 시간은 시간 측정 어떻게 하는지 몰라서 스톱워치로 했습니다
윈도우 cmd 켜서 접속했습니다
sftp> cd (해당폴더)
sftp> ls
(생략)
foss_asm_2211012010559617.xml foss_asm_2211012010559618.xml foss_asm_2211012010559619.xml
foss_asm_2211012010559620.xml foss_asm_2211012010559621.xml foss_asm_2211012010559622.xml
sftp>
26초 대기 후 listing 시작
시작 12초 후 listing 종료
총 시간 38초
댓글 입력