我有一个python程序,它处理一个html页面并创建一个url字典作为键和文件的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 TB的数据....我想在python中并行化我的代码(因此处理所需的时间将减少)但我不确定是否使用多线程或多处理或其他任何事情。
我正在阅读教程,但不知道如何继续。谢谢
编辑:
感谢所有的回复,我想问的主要问题是如何在这种情况下应用多线程/多线程。假设我正在对每个URL进行一些操作而不是像下面的代码一样下载它,我可以使用多线程或多处理来更快地进行操作
from urlparse import urlparse
ProcessAllURLs(URLs)
def ProcessAllURLs(URLs):
for eachurl in URLs:
x=urlparse(eachurl)
print eachurl.netloc
答案 0 :(得分:0)
由于处理是IO限制的,因此应该可以使用python多线程 - 全局解释器锁定不会影响性能