问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python线程池多少(2023年最新解答)

发布网友 发布时间:2024-10-05 04:29

我来回答

1个回答

热心网友 时间:2024-11-24 19:52

导读:本篇文章首席CTO笔记来给大家介绍有关python线程池多少的相关内容,希望对大家有所帮助,一起来看看吧。

Python多线程总结

在实际处理数据时,因系统内存有限,我们不可能一次把所有数据都导出进行操作,所以需要批量导出依次操作。为了加快运行,我们会采用多线程的方法进行数据处理,以下为我总结的多线程批量处理数据的模板:

主要分为三大部分:

共分4部分对多线程的内容进行总结。

先为大家介绍线程的相关概念:

在飞车程序中,如果没有多线程,我们就不能一边听歌一边玩飞车,听歌与玩游戏不能并行;在使用多线程后,我们就可以在玩游戏的同时听背景音乐。在这个例子中启动飞车程序就是一个进程,玩游戏和听音乐是两个线程。

Python提供了threading模块来实现多线程:

因为新建线程系统需要分配资源、终止线程系统需要回收资源,所以如果可以重用线程,则可以减去新建/终止的开销以提升性能。同时,使用线程池的语法比自己新建线程执行线程更加简洁。

Python为我们提供了ThreadPoolExecutor来实现线程池,此线程池默认子线程守护。它的适应场景为突发性大量请求或需要大量线程完成任务,但实际任务处理时间较短。

其中max_workers为线程池中的线程个数,常用的遍历方法有map和submit+as_completed。根据业务场景的不同,若我们需要输出结果按遍历顺序返回,我们就用map方法,若想谁先完成就返回谁,我们就用submit+as_complete方法。

我们把一个时间段内只允许一个线程使用的资源称为临界资源,对临界资源的访问,必须互斥的进行。互斥,也称间接制约关系。线程互斥指当一个线程访问某临界资源时,另一个想要访问该临界资源的线程必须等待。当前访问临界资源的线程访问结束,释放该资源之后,另一个线程才能去访问临界资源。锁的功能就是实现线程互斥。

我把线程互斥比作厕所包间上大号的过程,因为包间里只有一个坑,所以只允许一个人进行大号。当第一个人要上厕所时,会将门上上锁,这时如果第二个人也想大号,那就必须等第一个人上完,将锁解开后才能进行,在这期间第二个人就只能在门外等着。这个过程与代码中使用锁的原理如出一辙,这里的坑就是临界资源。Python的threading模块引入了锁。threading模块提供了Lock类,它有如下方法加锁和释放锁:

我们会发现这个程序只会打印“第一道锁”,而且程序既没有终止,也没有继续运行。这是因为Lock锁在同一线程内第一次加锁之后还没有释放时,就进行了第二次acquire请求,导致无法执行release,所以锁永远无法释放,这就是死锁。如果我们使用RLock就能正常运行,不会发生死锁的状态。

在主线程中定义Lock锁,然后上锁,再创建一个子线程t运行main函数释放锁,结果正常输出,说明主线程上的锁,可由子线程解锁。

如果把上面的锁改为RLock则报错。在实际中设计程序时,我们会将每个功能分别封装成一个函数,每个函数中都可能会有临界区域,所以就需要用到RLock。

一句话总结就是Lock不能套娃,RLock可以套娃;Lock可以由其他线程中的锁进行操作,RLock只能由本线程进行操作。

python线程池的使用

最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,,,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?这里主要要几个问题(关于python多线程的GIL问题就不再说了,网上太多了)。

一、既然多线程可以缩短程序运行时间,那么,是不是线程数量越多越好呢?

显然,并不是,每一个线程的从生成到消亡也是需要时间和资源的,太多的线程会占用过多的系统资源(内存开销,cpu开销),而且生成太多的线程时间也是可观的,很可能会得不偿失,这里给出一个最佳线程数量的计算方式:

最佳线程数的获取:

1、通过用户慢慢递增来进行性能压测,观察QPS(即每秒的响应请求数,也即是最大吞吐能力。),响应时间

2、根据公式计算:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)*cpu数量

3、单用户压测,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量。

二、为什么要使用线程池?

对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初始只有一个链接a,那么,这个时候只启动一个线程,运行之后,得到这个链接对应页面上的b,c,d,,,等等新的链接,作为新任务,这个时候,就要为这些新的链接生成新的线程,线程数量暴涨。在之后的运行中,线程数量还会不停的增加,完全无法控制。所以,对于任务数量不端增加的程序,固定线程数量的线程池是必要的。

三、如何使用线程池

过去使用threadpool模块,现在一般使用concurrent.futures模块,这个模块是python3中自带的模块,但是,python2.7以上版本也可以安装使用,具体使用方式如下:

注意到:

concurrent.futures.ThreadPoolExecutor,在提交任务的时候,有两种方式,一种是submit()函数,另一种是map()函数,两者的主要区别在于:

python中设置线程池最大数量不管用

使用线程池可以有效地控制系统中并发线程的数量。当系统中包含有大量的并发线程时,会导致系统性能急剧下降,甚至导致Python解释器崩溃,而线程池的最大线程数参数可以控制系统中并发线程的数量不超过此数。

结语:以上就是首席CTO笔记为大家整理的关于python线程池多少的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于python线程池多少的相关内容别忘了在本站进行查找喔。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 身份证号码 重号。另一个人已经把号码改了。结果我去银行办理想申请一个... 婚后财产包括哪些?婚后财产怎么判断归谁所有? 信阳师范学院哪些专业好? 结婚后取得的财产离婚归谁 惟愿时光不负什么意思 기황후!这是部什么韩剧?求帮助!! 信阳师范学院507分能否被英语专业录取? Excel中插入一个小方框的三种方法? Excel如何添加可以输入数字的小方框? 信阳师范学院优势专业排名 两道统计学题目,谁能帮我解释下13为啥错,错在哪?15为啥是对的,答案应... 带一个嘉字名字!谢谢! 苹果5S下载支付宝然后显示您已购买过此项目,所以可以免费下载,不再另外... 我想给我孩子取个名字:带《嘉》字 关于长沙2012年10月1日驾照新增项目考试规则!! 苹果5S的软件既不能下载也删不掉啊,求解,不是用助手安装的,全是App S... 男孩取嘉什么好听 可以告诉我鹿晗的名字用韩文说要怎么说是要中文发音的 上述团块内可见血流信号,甲状腺右侧叶多发实质性病灶,性质待定,到底怎么... 中问带嘉的名字,嘉什么好? 我今年刚搞完完,报信阳师范学院。那个学校的外语系很强 算二本里比较好... 信阳师范学院外国语学院办学思路 哪些好的读书网站 百度传输列表里保存的记录怎么删除? 我每天跑3千米,大约多少天后开始减肥 头孢克肟胶囊注意事项 贾宝玉为何爱吃女孩嘴上的胭脂他都吃过谁的? 什么是产能发挥率 产能释放率是什么 看你的微笑岁月不再老是什么歌曲 公章什么样 公章财务章什么样 “骞腾上紫微”的出处是哪里 三星的S5平板屏幕显示怎么样 “崛起商岩後”的出处是哪里 道之以致,齐之以刑,民免而无耻;道之以德,齐之以礼,有耻且格。解释这句... 三星s5的屏幕各项参数(ppi,分辨率)比苹果5s高,而且三星是苹果屏幕最大... “迁谪生华发”的出处是哪里 小黄车用户,你退押金成功了吗,怎么退 ? 牛尔维他命皙美白化妆水适合哪些肤质的人使用?