【发布时间】:2012-09-06 12:46:04
【问题描述】:
我有一个 python 2.7 代码,它使用 STORBINARY 函数将文件上传到 ftp 服务器,并使用 RETRBINARY 函数从该服务器下载。
但是,与戴尔笔记本电脑相比,不同品牌的三台笔记本电脑的上传需要很长时间。奇怪的是,当我手动上传任何文件时,所有系统都需要相同的时间。
手动上传速率和使用 python 脚本的上传速率在戴尔笔记本电脑上是相同的。但是,在所有其他品牌的笔记本电脑上(我尝试过使用 IBM、Toshiba、Fujitsu-Siemens),python 脚本的上传速率都比手动尝试的低。此外,在所有这些其他笔记本电脑上,使用 python 脚本的上传速率是相同的(1Mbit/s),而手动上传速率大约是 1Mbit/s。 8 兆比特/秒。
我已尝试更改上传文件的大小,但无济于事。 TCP Optimizer 提高了所有系统的下载速率,但对上传速率没有影响。在所有系统上使用此脚本的下载速度都很好,与手动下载速度相同。
我检查了服务器,它有超过 90% 的可用空间。所有笔记本电脑的网络连接都是相同的,我尝试一次只用一台笔记本电脑上传。所有笔记本电脑都具有几乎相同的系统配置、相同的操作系统和大致相同的可用驱动器空间。如果戴尔笔记本电脑在处理能力和 RAM 方面比其他 2 台笔记本电脑少一点,但我认为这没有影响,因为我已经检查了很多次,看看这些上传期间的 CPU 使用率和网络使用率有多少下载,我确信没有其他病毒或程序占用了我的带宽。
即使使用“storbinary”命令,当我将块大小指定为 57344(56 kB)时,上传速率从原来的 1 到 1.5 Kbit/s 提高到大约 5 Kbit/s...这是什么原因?以及如何找出我的手动上传客户端(我使用 filezilla)使用的块大小,或者更好的是上传的最佳块大小? @guidot
完整代码:
def upnew(counter=0):
f=open("c:/10", "w")
f.write(os.urandom(10*1024*1024))
f.close()
print "Logging in..."
ftpserver='xxxxxxx'
ftpuser='xxxxxxx'
ftppw='xxxxxxxxx'
ftp = FTP(ftpserver)
ftp.login(ftpuser, ftppw)
t = open("c:/10", "rb")
upstart = time.clock()
ftp.storbinary('STOR 10', t)
upende = time.clock()-upstart
print ((10*8)/upende)
print "press Return to disconnect"
raw_input()
ftp.quit()
print "FTP Verbindung abgebaut"
upnew(1)
【问题讨论】:
-
笔记本电脑都在运行windows?可以分享一下上传的代码吗?
-
您是否隔离了任何正在进行的处理?无需任何数据处理或其他处理的简单“上传通用文本文件”功能将帮助您找出问题的根源。
-
对于 S/O 来说有点离题,因为它并不是一个真正与编程相关的问题(除了 Python 恰好用于 FTP,它与系统/网络/设置更相关) - 可能是超级用户/管理员所有血淋淋的系统细节更有可能获得有用的答案。
-
假设您的 ftp 参数是 FTP 模块:尝试找出手动传输方法使用的块大小,并将其作为第三个参数传递给 storbinary,以确保您以相同的方式进行传输。
-
您可以观察wireshark 发生的情况——数据包时间戳可能会提供有关延迟位置的线索。听起来您已经做了所有正确的事情来缩小问题范围 - 祝您好运。