0
我有一個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
下載千兆字節是使服務器癱瘓。讓我們嘗試用請求的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