- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 python 的 ftplib 通过本地网络将大量数据(约 100 个文件 X 2GB)传输到 FTP 服务器。此代码在 Ubuntu 上运行。这是我的调用(self 是我的 FtpClient 对象,它是 ftplib 客户端的包装器):
# Store file.
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)
我的问题是,如何选择最佳 block 大小?我的理解是,最佳 block 大小取决于许多因素,其中最重要的是连接速度和延迟。我的代码将在许多不同的网络上以不同的速度和不同程度的拥塞全天运行。理想情况下,我想在运行时计算最佳 block 大小。
最佳 FTP 传输 block 大小是否与最佳 TCP 窗口大小相同?如果这是真的,并且打开了 TCP 窗口缩放,是否有办法从内核中获取最佳的 TCP 窗口大小? Linux内核如何/何时确定最佳窗口大小?理想情况下,我可以向 linux 内核询问最佳 block 大小,以避免重新发明轮子。
最佳答案
这是一个有趣的问题,我不得不深入研究一下 ;)
无论如何,这是一个如何确定 MTU 的好例子:http://erlerobotics.gitbooks.io/erle-robotics-python-gitbook-free/content/udp_and_tcp/udp_fragmentation.html
但是,您还应该考虑以下问题:MTU 是一种本地现象,可能只涉及本地网络的一部分。您考虑的是路径 MTU,即完整传输路径上的最小 MTU。 http://en.wikipedia.org/wiki/Path_MTU_Discovery因此,您必须了解每个相关组件的每个 MTU。这可能是个问题,例如,如果您使用巨型帧而交换机未使用,则交换机必须拆分帧。我已经遇到交换机不理解巨型帧并丢弃帧的问题。
现在是最有趣的问题:最佳 block 大小。很多 python 函数都采用 blocksize 或 chunksize 之类的参数。但它们没有解决底层传输协议(protocol)的 block 大小问题。 block 大小定义了一个读取缓冲区,其中包含要发送/读取的数据。 ftplib 中的标准大小是 8K(8192 字节)。因此,调整 block 大小应该不会真正影响传输速度。
控制底层传输协议(protocol)的 MTU 将由操作系统及其内核处理。
最后说说 ftp。 ftp 是一种古老的恐龙,它易于设置和使用,但并不总是传输文件的最佳方法。特别是如果您传输大量小文件。我不完全了解您的用例,因此考虑其他传输协议(protocol)替代方案(如 rsync 或 bbcp)可能是有意义的。后者似乎大大提高了复制速度。你真的应该看看http://moo.nac.uci.edu/~hjm/HOWTO_move_data.html
只是我的两分钱...
关于Python ftplib 最佳 block 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702578/
我想知道是否有人观察到使用 Python 的 ftplib 通过 ftp 下载或上传文件所花费的时间与通过 Windows 命令提示符或使用 Perl 执行 FTP get/put 相比非常长Net:
我正在使用 ftplib 在 Python 中下载文件,直到最近一切似乎都运行良好。我正在下载这样的文件: ftpSession = ftplib.FTP(host,username,password
通过 FTP 访问远程服务器时出现以下错误。不确定它有什么问题,所以我可以解决。任何线索都会有所帮助。 代码: import ftplib from ftplib import FTP ftp = f
我有一些远程文件: ___________ [somevar] Test: 2 ___________ 例如,我想将 var "Test"更改为 3,这样我将拥有: ___________ [some
我正在尝试使用 ftplib 在服务器上放置一个文件,但我遇到了一些我不知道如何处理的错误。登录有效,但尝试上传文件输出错误。这是我正在使用的代码: import ftplib import os d
我正在用 Python 编写测试工具,作为测试的一部分,我需要初始化 FTP 服务器并上传各种文件。我正在使用 ftplib,一切正常。我遇到的唯一问题是我在控制台窗口中看到大量 FTP 文本与我的测
当我从 iPython 0.13 运行这段代码时: import ftplib f=ftplib.FTP('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/') 我收到
我知道如何设置下载这样的文件,但大多数文件都没有命名为 file-LATEST。我怎样才能下载最新的文件? 通过: 修改日期 时间戳 if version.current < version.new
手册说 To download a file, use ftp.retrlines('RETR ' + filename) 这是我的做法: ftp.retrbinary('RETR media/bac
这个问题已经有答案了: Cannot list FTP directory using ftplib – but FTP client works (1 个回答) 已关闭 4 年前。 我正在使用 py
我有一个 python 程序,它基本上只是在远程 FTP 服务器和本地计算机之间移动文件。我有一些代码可以删除 FTP 站点上的文件,类似于 try: ftplib_obj.delete(so
尝试使用 ftplib 连接到 ftp 服务器时,我遇到了一些非常奇怪的行为。我正在做的是: import ftplib ftp = ftplib.FTP('my-ftp-server') ftp.l
我用谷歌搜索,但我只能找到如何上传一个文件...我正在尝试将所有文件从本地目录上传到远程 ftp 目录。有什么想法可以实现吗? 最佳答案 用循环? 编辑:在一般情况下,仅上传文件将如下所示: im
我已经搜索了几天,但还没有找到答案。 我尝试从 FTP 下载视频文件,我的脚本检查服务器,将 nlist() 与从文本文件解析的已下载文件列表进行比较,然后创建一个新的文件列表以获取并迭代它下载每个文
我正在使用 ftplib 传输文件。一切都很好。现在我试图在下载之前获取目标文件的大小。 首先,我尝试使用 ftp.size(filename) 获取大小。服务器提示我不能在 ascii 模式下执行此
我正在尝试使用 ftplib 获取文件列表并下载自上次检查以来的任何新文件。到目前为止我尝试运行的代码是: #!/usr/bin/env python from ftplib import FTP i
如何使用 ftplib 检查远程 ftp 上的文件是否为文件夹? 我现在最好的方法是做一个 nlst,并在每个文件上迭代调用大小,如果文件出错那么它是一个文件夹? 有没有更好的方法?我无法解析列表的输
我想用 Python 的 ftplib 客户端指定端口(而不是默认端口 21)。 代码如下: from ftplib import FTP ftp = FTP('localhost') # conne
我的 Centos 服务器上有 pyftpdlib 0.7.0,我在客户端上使用 ftplib 当我尝试运行此命令时,我收到此错误 客户端操作系统:Windows 7 python V:2.7 服务器
我正在尝试从ftplib.all_errors中提取有用的错误消息,正在捕获550 /dir.: No such file or directory,但我想隔离出它是错误的文件还是错误的目录。到目前为
我是一名优秀的程序员,十分优秀!