【问题标题】:Python ftp.retrbinary() does not work when called parallelized in functionPython ftp.retrbinary() 在函数中并行调用时不起作用
【发布时间】:2016-06-23 15:01:48
【问题描述】:

我正在使用脚本从 ftp 服务器检索数据。由于我想并行下载,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 不适用于并行下载吗?

【问题讨论】:

  • 对我来说很好。你能提供完整的错误堆栈跟踪吗?
  • 感谢您的回复!事实证明,并行化是问题所在。不幸的是,下载似乎没有开始,文件大小仍然为零。

标签: python python-2.7 ftp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多