python下载文件暂停恢复_Python:成功下载文件后,使用ftplib的文件下载将永远挂起...

我一直在尝试解决一个问题,当我们从ftp/ftps下载文件时。未成功执行下载文件后操作。没有出现可以提供有关该问题的更多信息的错误。

我试图在stackoverflow上搜索这个,发现了这个link,它讨论了类似的问题语句,看起来我也面临着类似的问题,尽管我不确定。在解决这个问题上不需要更多的帮助。在

我试着将FTP连接超时设置为60分钟,但效果不太理想。

在此之前,我使用的是ftplib的retrbinary(),但也出现了同样的问题。我试着通过不同的块大小和窗口大小,但同样的问题是可重复的。在

我正在尝试从AWS EMR集群下载大小为~3GB的文件。下面是示例代码。在def download_ftp(self, ip, port, user_name, password, file_name, target_path):

try:

os.chdir(target_path)

ftp = FTP(host=ip)

ftp.connect(port=int(port), timeout=3000)

ftp.login(user=user_name, passwd=password)

if ftp.nlst(file_name) != []:

dir = os.path.split(file_name)

ftp.cwd(dir[0])

for filename in ftp.nlst(file_name):

sock = ftp.transfercmd('RETR ' + filename)

def background():

fhandle = open(filename, 'wb')

while True:

block = sock.recv(1024 * 1024)

if not block:

break

fhandle.write(block)

sock.close()

t = threading.Thread(target=background)

t.start()

while t.is_alive():

t.join(60)

ftp.voidcmd('NOOP')

logger.info("File " + filename + " fetched successfully")

return True

else:

logger.error("File " + file_name + " is not present in FTP")

except Exception, e:

logger.error(e)

raise

在上面提到的链接中建议的另一个选项是下载小部分文件后关闭连接,然后重新启动连接。有人能建议如何实现这一点,但不确定如何从上次关闭连接前停止文件下载的同一点继续下载。这个方法是下载整个文件的充分证据。在

我对FTP服务器级超时设置了解不多,所以不知道该如何更改。我基本上想写一个通用的FTP下载器,它可以帮助从FTP/FTPS下载文件。在

当我使用ftplib的retrbinary()方法并将调试级别设置为2时。在

^{pr2}$

下面的日志正在打印。在cmd 'TYPE I'

put 'TYPE I\r\n'

get '200 Type set to I.\r\n'

resp '200 Type set to I.'

cmd 'PASV'

put 'PASV\r\n'

get '227 Entering Passive Mode (64,27,160,28,133,251).\r\n'

resp '227 Entering Passive Mode (64,27,160,28,133,251).'

cmd 'RETR FFFT_BRA_PM_R_201711.txt'

put 'RETR FFFT_BRA_PM_R_201711.txt\r\n'

get '150 Opening BINARY mode data connection for FFFT_BRA_PM_R_201711.txt.\r\n'

resp '150 Opening BINARY mode data connection for FFFT_BRA_PM_R_201711.txt.'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值