2016-06-23 1 views
0

ftp-server에서 데이터를 검색하는 스크립트를 사용하고 있습니다. 다운로드를 병렬화하려면 함수 내에서 ftp.retrbinary이 호출됩니다. 최대한 빨리 평행, 다운로드가 단지 걸리면를 다운로드 원하는함수에서 병렬화 된 호출시 Python ftp.retrbinary()가 작동하지 않습니다.

from ftplib import FTP 

def download_file(file_in, target_file): 
    ftp.retrbinary('RETR '+file_in, open(target_file, 'wb').write) 
    return 0 

ftp = FTP(FTP_HOST) 
ftp.login(FTP_USER, FTP_PASS) 
ftp.cwd(FTP_PATH) 

for file_input in files_to_check: 
    download_file(target_dir,file_input) 

및 데이터가 전송되지 않습니다 :

ATM의 작업 코드는 다음과 같습니다

from ftplib import FTP 
from joblib import Parallel, delayed 

def download_file(file_in, target_file): 
    ftp.retrbinary('RETR '+file_in, open(target_file, 'wb').write) 
    return 0 

ftp = FTP(FTP_HOST) 
ftp.login(FTP_USER, FTP_PASS) 
ftp.cwd(FTP_PATH) 

Parallel(n_jobs=2)(delayed(download_file)(target_dir,file_input) for file_input in files_to_check) 

는 사람이 있나요 이유는 ftp.retrbinary가 병렬 다운로드에 대해 작동하지 않습니다.

+0

나를 위해 잘 작동합니다. 전체 오류 스택 추적을 제공 할 수 있습니까? –

+0

답장을 보내 주셔서 감사합니다! 병렬화가 문제라고 판명되었습니다. 불행히도 다운로드가 시작되지 않고 파일 크기가 0으로 유지됩니다. – jonesl

답변

0

여러 병렬 전송에 하나의 FTP 세션을 사용할 수 없습니다. FTP 프로토콜은이를 지원하지 않습니다 (예를 들어 SFTP와는 반대).

각 병렬 작업에 대해 별도의 FTP 세션을 열어야합니다.

+0

설명 주셔서 감사합니다! 지금 일하고있다. – jonesl

+0

힌트를 보내 주셔서 감사합니다;) – jonesl

관련 문제