我正在使用脚本从ftp-server检索数据。由于我想并行化下载,因此在函数内调用ftp.retrbinary
。
Atm的工作代码如下所示:
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)
只要我想并行下载,下载就会卡住而且没有数据传输:
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)
您不能将一个FTP会话用于多个并行传输。 FTP协议不支持该功能(例如,与SFTP相反)。
您必须为每个并行作业打开一个单独的FTP会话。