python多线程能提高效率吗
发布网友
发布时间:2022-04-21 22:27
我来回答
共3个回答
热心网友
时间:2022-04-18 04:50
如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch
但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫(我就不明白为什么Python总和爬虫联系在一起…不过也只想起来这个例子…),绝大多数时间爬虫是在等待socket返回数据。这个时候C代码里是有release GIL的,最终结果是某个线程等待IO的时候其他线程可以继续执行。
反过来讲:你就不应该用Python写CPU密集型的代码…效率摆在那里…
如果确实需要在CPU密集型的代码里用concurrent,就去用multiprocessing库。这个库是基于multi process实现了类multi thread的API接口,并且用pickle部分地实现了变量共享。
再加一条,如果你不知道你的代码到底算CPU密集型还是IO密集型,教你个方法:
multiprocessing这个mole有一个mmy的sub mole,它是基于multithread实现了multiprocessing的API。
假设你使用的是multiprocessing的Pool,是使用多进程实现了concurrency
from multiprocessing import Pool
如果把这个代码改成下面这样,就变成多线程实现concurrency
from multiprocessing.mmy import Pool
两种方式都跑一下,哪个速度快用哪个就行了。
UPDATE:
刚刚才发现concurrent.futures这个东西,包含ThreadPoolExecutor和ProcessPoolExecutor,可能比multiprocessing更简单
热心网友
时间:2022-04-18 06:08
很多爬虫工作者都遇到过抓取速度非常慢,现在的大多数网站都具备了反爬虫技术,对IP的访问频率*很严格。如果想提升爬虫的速度,大家可以尝试以下方法。
一、尽量减少访问次数。
单次爬虫任务的大多耗时在网络请求等待响应,所以能减少网络请求就尽量减少请求,这样既能减少目标网站的压力,也能减少代理服务器的压力,提高工作效率。
二、精简流程,减少重复。
大部分网站并不是严格意义上的树状结构,而是多重交叉的网状结构,所以从多个入口深入的网页会有很多重复,一般根据URL或者ID进行唯一性判别,爬过的就不需要再爬。一些数据如果可以在一个页面内获取到,也可以在多个页面下获取到,那就选择只在一个页面内获取。
三、多线程任务。
大量爬虫是一个IO阻塞的任务,所以采用多线程的并发方式可以有效地提高整体速度。多线程可以更好地提高资源利用率,程序设计也更加坚定,程序响应也更快。
四、分布式任务。
上面三点都做到极致了,但是单机单位时间内能爬取到的网页数量还不足以达到目标,在指定时间内还不能及时的完成任务,那么就只能多机器来同时进行爬虫任务了,这就是分布式爬虫。
做好以上几点,基本可以将爬虫的效率提升大半,另外爬虫代理ip也是不可缺少的尤其是对于量大的任务,IPIDEA提供全球ip的同时更注重保护数据的安全,也可以减少反爬虫策略的触发,一举多得。
热心网友
时间:2022-04-18 07:43
python因为有GIL全局解释器锁,所以python的多线程不能利用多核,但是如果是io密集型的项目,多线程效率也很好,我就是用多线程来做爬虫的。
python多线程能提高效率吗
多线程在适当的情况下可以提高Python程序的执行效率,但在特定场景下需要注意并发性、资源竞争和线程安全等问题。
《网络工程师的Python之路》(控制实验1,threading,多线程,华为)
总结而言,多线程技术在提高网络工程师的工作效率方面发挥了重要作用。虽然我对于计算机资源调度原理的理解并不深入,但对于实际应用,多线程技术的使用能够带来显著的提升。我鼓励大家在实际工作中尝试使用多线程技术,以提高工作效率。今天是教师节,我想要向曾经帮助和支持过我的老师们致以最深的敬意。同时...
Python多线程—threading库使用
线程是操作系统中的最小单位,负责执行程序指令,它在进程内共享资源。线程相较于进程更为轻量,且可以并发执行,提高程序运行效率。在Python中,threading库提供了多线程的支持。创建线程有两种方式:一是定义任务函数,并通过调用start()启动线程;二是定义任务类,继承自threading.Thread,实现自定义线程。
python 为什么多线程会造成数据不准
如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch 但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫
python线程多少个好(2023年最新整理)
Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多线程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率。单线程、多线程和多进程的效率对比测试:github地址 资料显示,如果多线程的进程是CPU密集型的,那多线程...
python多少个线程是最优效率
Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多线程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率。单线程、多线程和多进程的效率对比测试:github地址 资料显示,如果多线程的进程是CPU密集型的,那多线程...
什么是线程(多线程),Python多线程的好处
进程之间不能共享内存,但线程之间共享内存非常容易。操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务并发执行比使用多进程的效率高。Python 语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了 Python 的多线程...
Python3 多线程,多进程最全整理
在单进程中,多个线程协作以提高效率。 GIL(全局解释器锁)是CPython解释器的特性,它限制了同一时刻只能有一个线程执行Python字节码,尽管这在单线程场景下提供了效率,但在多核环境下,GIL可能会成为性能瓶颈。 为解决GIL问题,Python提供了multiprocessing包,它利用多进程而非多线程,每个进程都有...
为什么有人说 Python 的多线程是鸡肋
所以在python里线程不要盲目用, 也不要滥用。 但是线程不安全是事实。如果仅仅是做几个后台任务,则可以考虑使用守护线程做。如果需要做一些危险操作,可能会崩溃的,就用子进程去做。 如果需要高度稳定性,同时并发数又不高的服务。则强烈建议用多进程的multiprocessing模块实现。在linux或者是unix里,...
python多线程作用
进程之间不能共享内存,但线程之间共享内存非常容易。操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务并发执行比使用多进程的效率高。Python 语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了 Python 的多线程...