使用异步文件下载选取文件路径和文件名

时间:2016-12-24 09:46:28

标签: python python-3.x asynchronous

我目前正在使用此代码(python 3.5.2):

from multiprocessing.dummy import Pool
from urllib.request import urlretrieve

urls = ["link"]
result = Pool(4).map(urlretrieve, urls)
print(result[0][0])

它可以工作,但是用一些奇怪的名字保存到临时文件中,有没有办法选择文件路径和可能的文件名?除了添加文件扩展名外,还可以在没有文件扩展名的情况下保存。

谢谢!

1 个答案:

答案 0 :(得分:0)

您只需向urlretrieve提供位置即可。但是pool.map似乎不支持函数中的多个args(Python multiprocessing pool.map for multiple arguments)。因此,您可以如此处所述那样进行重构,或者使用不同的多处理原语,例如: Process

from multiprocessing import Process
from urllib.request import urlretrieve

urls = ["link", "otherlink"]
filenames = ["{}.html".format(i) for i in urls]
args = zip(urls, filenames)
for arg in args:
    p = Process(urlretrieve, arg)
    p.start()

在评论中,您说只需要下载1个网址。在这种情况下,这很容易:

from urllib.request import urlretrieve
urlretrieve("https://yahoo.com", "where_to_save.html")

然后该文件将保存在where_to_save.html中。你当然可以在那里提供完整的路径,例如/where/exactly/to/save.html