2. 使用concurrent.futures.ThreadPoolExecutor创建线程池: 创建一个ThreadPoolExecutor实例,并设置最大线程数。 使用executor.submit()方法提交下载任务到线程池。
时间: 2024-09-20 22:13:44 浏览: 69
在Python中,`concurrent.futures.ThreadPoolExecutor` 是用于并发编程的一个强大工具,它允许你通过线程池管理并行执行的任务。以下是如何使用这个模块来创建线程池并执行下载任务的例子:
```python
import concurrent.futures
# 设置线程池的最大线程数(可以根据你的系统资源调整)
max_workers = 5
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
# 准备需要下载的URLs列表
urls = ["http://example.com/file1", "http://example.com/file2", ...]
# 使用executor.submit()方法将每个下载任务作为Future对象提交给线程池
futures = {executor.submit(download_task, url): url for url in urls}
# 当所有任务完成时(包括成功和失败),我们等待所有的Future对象
for future in concurrent.futures.as_completed(futures):
try:
downloaded_url = futures[future] # 获取对应的URL
result = future.result() # 获取下载的结果
print(f"Downloaded: {downloaded_url}")
except Exception as exc:
print(f"Error downloading {downloaded_url}: {exc}")
```
在这个例子中,`download_task`是你定义的实际下载函数,它会接受一个URL作为参数。`submit()`方法返回一个`Future`对象,你可以通过`.result()`获取该任务的最终结果。`as_completed()`函数会按顺序返回已完成的任务,而不是阻塞直到所有任务都完成。
阅读全文