你帮生成个多线程下载文件的python代码
时间: 2024-09-28 20:06:48 浏览: 34
Python 多线程实例详解
在Python中,我们可以使用`concurrent.futures`模块来实现多线程下载文件。这是一个简单示例,它使用了`ThreadPoolExecutor`来并发地下载多个文件:
```python
import concurrent.futures
import requests
# 文件URL列表
urls = ['http://example.com/file1', 'http://example.com/file2', 'http://example.com/file3']
def download_file(url):
"""下载单个文件"""
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(f'downloaded_{url.split("/")[-1]}', 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f'Downloaded: {url}')
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# 提交任务给线程池
future_to_url = {executor.submit(download_file, url): url for url in urls}
# 等待所有任务完成
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
future.result() # 如果下载成功,获取结果
print(f'{url} downloaded successfully.')
except Exception as exc:
print(f'Failed to download {url}: {exc}')
```
在这个代码中,我们首先定义了一个下载函数,然后创建一个线程池,并提交每个URL的下载任务。当所有任务完成后,我们会检查是否有错误发生。
请注意,这个例子假定网络连接稳定,如果需要处理可能出现的异常,比如网络错误,你可能需要对`requests.get()`进行适当的错误处理。
阅读全文