使用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模块,我们可以很方便地实现多个下载任务的并发执行。线程池的最大并发数可以根据实际情况进行调整,以便提供 性能。
