faq,

Python 常见问题 - Python 如何使用多线程执行任务,如下载大量图片

Read in English

问题现象

在 Python 编程中,经常需要使用多线程执行来提高效率。搜索引擎会给出非常多种答案,但是哪一种才是最简单有效的呢?

下面以 Python 多线程下载图片为例,说明 Python 如何使用多线程执行任务。

案例

当你需要下载多张图片时,使用多线程可以加快下载速度。可以使用 Python 的 concurrent.futures 库中的 ThreadPoolExecutor 类来实现。ThreadPoolExecutor 类提供了一个简单的接口来创建一个线程池,然后将任务提交到线程池中。下面是一个使用 ThreadPoolExecutor 类下载多张图片的代码案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
from concurrent.futures import ThreadPoolExecutor

def download_image(url):
    response = requests.get(url)
    filename = url.split("/")[-1]
    with open(filename, "wb") as f:
        f.write(response.content)

if __name__ == "__main__":
    urls = [
        "https://example.com/image1.jpg",
        "https://example.com/image2.jpg",
        "https://example.com/image3.jpg",
        "https://example.com/image4.jpg",
        "https://example.com/image5.jpg"
    ]
    with ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_image, urls)

在这个例子中,我们定义了一个 download_image 函数,它接受一个 URL 作为参数,然后使用 requests 库下载图片并将其保存到本地文件系统中。我们还定义了一个包含多个 URL 的列表 urls。最后,我们使用 ThreadPoolExecutor 类创建了一个最大工作线程数为 5 的线程池,并使用 map 方法将 download_image 函数应用于 urls 列表中的每个 URL。

参考链接


CatchZeng
Written by CatchZeng Follow
AI (Machine Learning) and DevOps enthusiast.