欢迎访问宙启技术站
智能推送

使用concurrent.futures在Python中实现并发下载任务

发布时间:2024-01-12 13:35:57

Python的concurrent.futures模块提供了一种简单且高级别的接口,用于异步执行可调用对象。它可以方便地实现并发下载任务。

下面是一个使用concurrent.futures模块实现并发下载任务的示例代码:

import requests
import concurrent.futures

# 定义一个下载函数,用于下载指定的URL
def download(url):
    response = requests.get(url)
    content = response.content
    filename = url.split("/")[-1]
    with open(filename, "wb") as f:
        f.write(content)
    print(f"下载完成:{filename}")

# 定义要下载的URL列表
urls = [
    "https://example.com/file1.jpg",
    "https://example.com/file2.jpg",
    "https://example.com/file3.jpg",
    # 添加更多的URL...
]

# 创建一个线程池,最大并发数为5
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    # 提交下载任务到线程池
    futures = [executor.submit(download, url) for url in urls]

    # 等待所有下载任务完成
    concurrent.futures.wait(futures)

print("所有下载任务已完成")

在这个示例中,我们首先定义了一个download函数,用于下载指定的URL。然后,我们准备了一个URL列表,每个URL都是要下载的文件的地址。

接下来,我们使用concurrent.futures.ThreadPoolExecutor创建了一个线程池,并将最大并发数设置为5。然后,我们使用executor.submit方法将下载任务提交到线程池,并将返回的Future对象存储在futures列表中。

最后,我们使用concurrent.futures.wait等待所有下载任务完成。完成后,我们输出一条表示所有下载任务已完成的消息。

通过使用concurrent.futures模块,我们可以很方便地实现多个下载任务的并发执行。线程池的最大并发数可以根据实际情况进行调整,以便提供 性能。