在函数中调用并行化时,Python ftp.retrbinary()不起作用

时间:2016-06-23 15:01:49

标签: python python-2.7 ftp

我正在使用脚本从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不能用于并行下载?

1 个答案:

答案 0 :(得分:0)

您不能将一个FTP会话用于多个并行传输。 FTP协议不支持该功能(例如,与SFTP相反)。

您必须为每个并行作业打开一个单独的FTP会话。