使用wget、requests或webbrowser在Python中下载速度

使用wget、requests或webbrowser在Python中下载速度,python,download,python-requests,wget,python-webbrowser,Python,Download,Python Requests,Wget,Python Webbrowser,我尝试了不同的方法从URL列表下载文件,发现使用wget、requests或urllib模块下载所有文件需要很长时间。 使用webbrowser模块打开URL要快得多,只需几秒钟,而其他模块只需几分钟。 以下是我的四次尝试: def open_links_request(link_lst): s = requests.Session() for invoice in link_lst: url = invoices[invoice]['link'] r = s.get(url,

我尝试了不同的方法从URL列表下载文件,发现使用wget、requests或urllib模块下载所有文件需要很长时间。 使用webbrowser模块打开URL要快得多,只需几秒钟,而其他模块只需几分钟。 以下是我的四次尝试:

def open_links_request(link_lst):
s = requests.Session()
for invoice in link_lst:
    url = invoices[invoice]['link']
    r = s.get(url, allow_redirects=True)
    open(invoice + '.pdf', 'wb').write(r.content)

def open_links_wget(link_lst):
for invoice in link_lst:
    url = invoices[invoice]['link']
    wget.download(url)

def open_links_webbrowser(link_lst):
for link in link_lst:
    webbrowser.open_new_tab(link)

def open_links_urllib(link_lst):
for invoice in link_lst:
    url = invoices[invoice]['link']
    with urllib.request.urlopen(url) as response, open(invoice + '.pdf', 'wb') as out_file:
        data = response.read() 
        out_file.write(data)
下载后,脚本将重命名和移动文件。但是,使用webbrowser,在程序的下一部分启动时,文件下载尚未完成。我添加了一个函数来检查文件是否完整,但它看起来有点凌乱。我宁愿使用其他模块之一,因为这样,下一步只会在文件下载完成后开始。
下载时间的巨大差异是意料之中的吗?还是有什么方法可以显著加快其他模块的下载时间?

我猜
webbrowser
方法更快,因为浏览器异步下载文件(从某种意义上说,它可以一次下载所有文件),而其他方法是顺序的(只有在保存上一个文件后才能下载下一个文件)。您可以使用,例如,使下载并发(异步)。