python线程池的四种好处总结

 更新时间:2021年04月28日 08:29:34   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于python线程池的四种好处归纳内容,有兴趣的朋友们可以学习下。

1、使用好处

提高性能:由于减去了大量新建终止线程的费用,重用了线程资源;

适用场景:适用于处理大量突发请求或需要大量线程完成任务,但实际任务处理时间短。

防御功能:可以有效避免系统因线程过多而导致系统负载过大而相应变慢的问题。

代码优势:使用线程池的语法比创建自己的线程更简单。

2、实例

"""
@file   : 004-线程池的使用.py
@author : xiaolu
@email  : luxiaonlp@163.com
@time   : 2021-02-01
"""
import concurrent.futures
import requests
from bs4 import BeautifulSoup
 
 
def craw(url):
    # 爬取网页内容
    r = requests.get(url)
    return r.text
 
 
def parse(html):
    # 解析其中的内容
    soup = BeautifulSoup(html, "html.parser")
    links = soup.find_all("a", class_="post-item-title")
    return [(link["href"], link.get_text()) for link in links]   # 那链接和标题拿出来
 
 
if __name__ == '__main__':
    # 待爬取的网页链接
    urls = [
        "https://www.cnblogs.com/sitehome/p/{}".format(page) for page in range(1, 50 + 1)
    ]
        
    # craw
    with concurrent.futures.ThreadPoolExecutor() as pool:
        htmls = pool.map(craw, urls)
        htmls = list(zip(urls, htmls))
        for url, html in htmls:
            print(url, len(html))
    print("craw over")
    
    # parse
    with concurrent.futures.ThreadPoolExecutor() as pool:
        futures = {}
        for url, html in htmls:
            future = pool.submit(parse, html)
            futures[future] = url
    
        # for future, url in futures.items():
        #     print(url, future.result())
    
        for future in concurrent.futures.as_completed(futures):
            url = futures[future]
            print(url, future.result())

知识点补充:

线程池的使用

线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。

如果使用线程池/进程池来管理并发编程,那么只要将相应的 task 函数提交给线程池/进程池,剩下的事情就由线程池/进程池来搞定。

Exectuor 提供了如下常用方法:

submit(fn, *args, **kwargs):将 fn 函数提交给线程池。*args 代表传给 fn 函数的参数,*kwargs 代表以关键字参数的形式为 fn 函数传入参数。

map(func, *iterables, timeout=None, chunksize=1):该函数类似于全局函数 map(func, *iterables),只是该函数将会启动多个线程,以异步方式立即对 iterables 执行 map 处理。

shutdown(wait=True):关闭线程池。

程序将 task 函数提交(submit)给线程池后,submit 方法会返回一个 Future 对象,Future 类主要用于获取线程任务函数的返回值。由于线程任务会在新线程中以异步方式执行,因此,线程执行的函数相当于一个“将来完成”的任务,所以 Python 使用 Future 来代表。

到此这篇关于python线程池的四种好处总结的文章就介绍到这了,更多相关python线程池的四种好处归纳内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现包含min函数的栈

    Python实现包含min函数的栈

    这篇文章主要介绍了Python实现包含min函数的栈,可实现栈中元素的计算及进栈出栈等操作,需要的朋友可以参考下
    2016-04-04
  • python3.10及以上版本编译安装ssl模块的详细过程

    python3.10及以上版本编译安装ssl模块的详细过程

    最近搞安装ssl模块每天都弄到很晚,所以这里给大家整理下,这篇文章主要给大家介绍了关于python3.10及以上版本编译安装ssl模块的详细过程,文中介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 对python打乱数据集中X,y标签对的方法详解

    对python打乱数据集中X,y标签对的方法详解

    今天就为大家分享一篇对python打乱数据集中X,y标签对的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python中使用 zipfile创建文件压缩工具

    Python中使用 zipfile创建文件压缩工具

    这篇文章主要介绍了Python中使用zipfile创建文件压缩工具,通过使用 wxPython 模块,我们创建了一个简单而实用的文件压缩工具,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的ca参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Django ManyToManyField 跨越中间表查询的方法

    Django ManyToManyField 跨越中间表查询的方法

    今天小编就为大家分享一篇Django ManyToManyField 跨越中间表查询的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 实操Python爬取觅知网素材图片示例

    实操Python爬取觅知网素材图片示例

    大家好,本篇文章介绍的是实操Python爬取觅知网素材图片示例,感兴趣的朋友赶快来看一看吧,对你有用的话记得收藏起来,方便下次浏览
    2021-11-11
  • Python自动化办公之清理重复文件详解

    Python自动化办公之清理重复文件详解

    这篇文章主要为大家详细介绍了如何利用Python清理重复的文件,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下
    2022-05-05
  • Django处理文件上传File Uploads的实例

    Django处理文件上传File Uploads的实例

    今天小编就为大家分享一篇Django处理文件上传File Uploads的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • pycharm Tab键设置成4个空格的操作

    pycharm Tab键设置成4个空格的操作

    这篇文章主要介绍了pycharm Tab键设置成4个空格的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 通过底层源码理解YOLOv5的Backbone

    通过底层源码理解YOLOv5的Backbone

    yolov5的特征提取网络兼顾速度与精度,将PAN与PFN深度融合,对不同尺度鲁棒性强,可以即插即用,后接不同的检测器,下面这篇文章主要给大家介绍了关于如何通过底层源码理解YOLOv5的Backbone的相关资料,需要的朋友可以参考下
    2022-05-05

最新评论