我该怎么做才能让我的程序运行得更快?
问题描述:
我有一个python程序,它处理一个html页面,并创建一个url的字典作为key和文件的md5sum作为一个值。字典长度是6000.每个url都是一个zip文件,它被下载到机器中,每次下载文件后检查md5sum。所有要下载的文件的总大小为572 GB。我该怎么做才能让我的程序运行得更快?
的网址是具有下载的链接,如价值文件的密钥和的md5sum字典
的代码是
DownloadAllURLs(URLs)
def DownloadAllURLs(URLs):
for eachurl in URLs:
if os.path.isfile(eachurl):
print eachurl, "already exists"
else:
print "Going to Download",eachurl
Download(eachurl)
CheckMd5(eachurl,URLs(eachurl))
def Download(eachurl):
command='sudo wget --user=abc --password=xyz'
command=command+" "+url
print command
result=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err=result.communicate()
def CheckMd5(url,tail,md5sum):
command=['md5sum',tail]
result=subprocess.Popen(command,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
md5, err=result.communicate()
if(md5[:32]==md5sum):
print "The",tail,"is downloaded successufully with correct md5"
else:
print "The",tail,"is not downloaded correcty wrong md5"
WriteWarcFile(url,tail)
CheckMd5(url,tail,md5sum)
上面的代码下载一切对我来说6000个zip文件,但从我在哪里下载服务器很慢,我只能得到40-60 kbps的下载时有时..
我用上面的代码来下载像数据的1-3 T字节....我想平行我的鳕鱼e在Python中(所以处理的时间会减少),但我不确定是使用多线程还是多处理或其他。
我读的教程,但不知道如何着手。谢谢
编辑:
感谢所有的答复,主要的问题我要问的是如何在这样的情况下应用多线程/多线程。假设我做的每一个URL的一些操作,而不是下载它,如下面的代码,我可以让它更快了使用多线程或mutlprocessing
from urlparse import urlparse
ProcessAllURLs(URLs)
def ProcessAllURLs(URLs):
for eachurl in URLs:
x=urlparse(eachurl)
print eachurl.netloc
答
由于处理IO的限制,应该可以使用Python多线程 - 全局解释锁不会影响数据的性能产生很大
下载千兆字节是使服务器瘫痪。让我们尝试用请求的5倍速度击中它! – 2012-03-30 21:27:00
@kich是你的程序太慢还是服务器太慢? – 2012-03-30 21:31:01
我认为服务器速度很慢,有时它会给我提供40kbps的速度,否则它会提供26 mbps的速度。我没有选择,而不是从他们的服务器上下载,所以我想知道是否有任何方法可以ping服务器多次并下载更快 – kich 2012-03-30 21:35:06