如何解决ftplib - 下载并在屏幕上显示哈希标记并且可以随时中断
我想使用 ftplib 下载文件。
import ftplib
class Ftp:
def start(self):
self.ftp = ftplib.FTP('speedtest.tele2.net')
self.ftp.login()
with open('1GB.zip','wb') as f:
result = self.ftp.retrbinary('RETR 1GB.zip',f.write)
def stop(self):
self.ftp.sock.close()
我的第一个问题是,当我调用 start()
时,我可以看到文件资源管理器中有一个文件,它的大小不断增长。然而,屏幕上什么也没有。下载时如何调用 print('#',end='')
?如下图。
第二。当我调用 stop()
时,没有发生任何事情,因为文件大小一直在增长。我也试过 self.ftp.abort()
但它会挂起整个过程。如何随时停止下载过程?
解决方法
只要你调用 start 方法并调用 retrbinary,执行线程就会卡在那里,直到下载完成。在那段时间你什么也做不了。
检查 FTP 库是否允许传递回调函数,然后您可以使用该函数显示进度。
另一种方法是使用支持 asyncio 的 FTP 库,这将释放主线程并允许您在文件下载时显示进度或执行其他操作。
另一个不太干净的解决方案是使用多处理,它将启动一个全新的 Python 进程来执行您的 start 方法。同时您可以使用主进程来显示进度。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。