我想知道是否有人观察到使用Python的 ftplib 下载或上传文件所花费的时间非常大,与执行FTP get / put over windows命令提示符或使用Perl相比 Net :: FTP 模块。
我创建了一个类似于http://code.activestate.com/recipes/521925-python-ftp-client/的简单FTP客户端,但是我无法达到在Windows DOS提示符下运行FTP或使用perl时获得的速度。是否有我缺少的东西或者它是Python ftplib模块的问题。
如果你能说明为什么我用Python获得低吞吐量,我真的很感激。
答案 0 :(得分:4)
问题在于块大小,我使用的块大小为1024,太小了。将块大小增加到250Kb后,所有不同平台的速度都相似。
def putfile(file=file, site=site, dir=dir, user=())
upFile = open(file, 'rb')
handle = ftplib.FTP(site)
apply(handle.login, user)
print "Upload started"
handle.storbinary('STOR ' + file, upFile, 262144)
print "Upload completed"
handle.quit()
upFile.close()
答案 1 :(得分:1)
我使用FTP_TLS
在默认的blockize 8192上遇到了类似的问题site = 'ftp.siteurl.com'
user = 'username-here'
upass = 'supersecretpassword'
ftp = FTP_TLS(host=site, user=user, passwd=upass)
with open(newfilename, 'wb') as f:
def callback(data):
f.write(data)
ftp.retrbinary('RETR filename.txt', callback, blocksize=262144)
增加块大小会使速度提高10倍。谢谢@Tanmoy Dube