问题现象
在 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。
参考链接
- https://www.pythontutorial.net/python-concurrency/python-threadpoolexecutor/
- https://www.yisu.com/zixun/773580.html
- https://blog.csdn.net/wulong710/article/details/109435945
- https://www.jianshu.com/p/6d6e4f745c27
- https://docs.python.org/zh-cn/3/library/concurrent.futures.html
- https://www.cnblogs.com/tujia/p/13565799.html