python线程池的四种好处总结
作者:小妮浅浅 发布时间:2023-01-27 11:09:55
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 来代表。
来源:https://www.py.cn/jishu/jichu/30058.html


猜你喜欢
- pandas解决excel科学计数法问题excel默认处理超14位的数字成科学计数法,且后面的数字默认变0。使用pandas合表或者生成新表
- 这篇文章主要为大家详细介绍了python编写实现抽奖器,文中代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下# codi
- 快速排序的基本思想:首先选定一个数组中的一个初始值,将数组中比该值小的放在左边,比该值大的放在右边,然后分别对左边的数组进行如上的操作,对右
- 数据库复制就是由两台服务器,主服务器和备份服务器,主服务器修改后,备份服务器自动修改,在以前的文章中已经做了详细的说明,这里就不在重复.使用
- 问题描述MySQL函数或者存储过程中使用group_concat()函数导致数据字符过长而报错CREATE DEFINER=`root`@`
- Go 程序运行时,有些场景下会导致进程进入某个“高点”,然后就再也下不来了。比如,多年前曹大写过的一
- 一、开发环境python 3.6.6opencv-python 4.5.1二、设计要求1、使用opencv-python对人脸口罩进行检测三
- 在数据分析领域,数据库是我们的好帮手。不仅可以接受我们的查询时间,还可以在这基础上做进一步分析。所以,我们必然要在数据库插入数据。在实际应用
- 在Python中,json指的是符合json语法格式的字符串,可以单行或者多行。它可以方便的在使用在多种语言中,这里介绍的是在python中
- 目录1、如何按照字典的值的大小进行排序2、优雅的一次性判断多个条件3、如何优雅的合并两个字典1、如何按照字典的值的大小进行排序我们知道,字典
- 1、在MySQL中要修改全局(global)变量,有两种方法:方法一,修改my.ini配置文件,如果要设置全局变量最简单的方式是在my.in
- redis-pyredis-py是Python操作Redis的第三方库,它提供了与Redis服务器交互的API。GitHub地址:https
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 效果图:图(1) 原始图图(2) 缩小后图(3) 放大后代码如下:<!DOCTYPE html><html> <
- 一、引言网络上充满了窃听,我们的信息很容易被不怀好意的人获得,给我们造成不好的影响。如果你需要在网络上传输机密或者敏感的隐私信息,为了防备别
- 概述我在教学和实际设计中的一些心得。就不长篇大论了!让大家省些时间,捞干的。尽量通俗易懂。想知道怎样设计标志,就要知道什么是标志?标志:外来
- 高阶函数简介高阶函数 的英文名叫 Higher-Order Function ,是 函数式编程 中的一种。他的表现形式往往是通过把函数作为参
- 这可能是一个非常简单的问题,但是今天花一点点时间把这个简单的问题在说清晰一点,相信大家对CSS的学习和认识会很有帮助,强化一些概念的东西,对
- 一 简介python-mysql-replication 是基于python实现的 MySQL复制协议工具,我们可以用它来解析binlog
- 一旦被黑客获取到webshell,黑客就知道了你的sqlserver管理员密码,如果sqlserver再没有经过安全设置那么黑客很容易就提权