python 多线程下载 queue
时间: 2023-08-25 21:16:05 浏览: 60
你可以使用Python中的多线程和队列来实现多线程下载。下面是一个简单的示例代码:
```python
import threading
import queue
import requests
def download_file(url, save_path):
response = requests.get(url)
if response.status_code == 200:
with open(save_path, 'wb') as file:
file.write(response.content)
print(f"Downloaded {save_path}")
else:
print(f"Failed to download {url}")
def worker(queue, save_dir):
while not queue.empty():
url, filename = queue.get()
save_path = f"{save_dir}/{filename}"
download_file(url, save_path)
queue.task_done()
def main():
url_list = [
('http://example.com/file1.txt', 'file1.txt'),
('http://example.com/file2.txt', 'file2.txt'),
('http://example.com/file3.txt', 'file3.txt')
]
save_dir = 'downloads'
# 创建队列并将下载任务放入队列
download_queue = queue.Queue()
for url, filename in url_list:
download_queue.put((url, filename))
# 创建多个线程来处理下载任务
num_threads = 3
for _ in range(num_threads):
thread = threading.Thread(target=worker, args=(download_queue, save_dir))
thread.start()
# 等待所有线程完成
download_queue.join()
if __name__ == '__main__':
main()
```
上述代码中,`download_file` 函数用于实际的文件下载操作。`worker` 函数作为线程的执行函数,不断从队列中获取下载任务并执行。`main` 函数创建线程、队列,并将下载任务放入队列,然后等待所有任务完成。
这个例子中,我们创建了一个包含3个线程的线程池,每个线程从队列中获取下载任务并执行。你可以根据需要调整线程数量和下载任务列表。
希望这可以帮助到你!如果有任何问题,请随时问我。