python多线程有用吗_Python多线程理解

前言

在写python爬虫的时候遇到了多线程,使用多线程的目的是降低抓取时间。接着我接触了一些IO概念,IO就是Input和Ouput,数据进出CPU的意思。

数据从网线或网卡进入CPU算Input(get请求得到源码),反之就是Output,这是网络IO。

数据从硬盘进入CPU也是Input,反过来就是Output(把数据write进文件),这是磁盘IO。

先不细究IO的原理,只需要知道有IO(IO密集型任务),就用python多线程,提高效率。

概念

怎么理解线程:

线程可以是一整个Py程序,也可以是Py文件里的一个函数。如果Py程序或者函数开始执行了,你也可以说线程开始执行了。

上个图

接下来是并发和并行

python的多线程是并发还是并行呢?  答案是并发。

同一时间还是只干一件事,跟单线程没什么两样,所以有大佬说python的多线程就鸡肋。

不过.....对于IO密集型任务,会大概率遇到阻塞(等待),CPU等待的时候就不做事,相当于浪费了。这里使用多线程就有帮助。

挂起、竞争gil的操作是由系统调度的,我们不用管。挂起、竞争、另一个线程开始执行,这个过程会消耗一点时间,称切换时间

若切换时间<

最后一个重要的概念是主线程、子线程

子线程其实就是你要并发(同一时间窗做很多次)的任务,比如get请求和write入文件。

这些任务一般都会写进一个函数func或者类里面,然后两步走

thread  =  Threading.Thread(target =函数func,args=(参数1,参数2))    #用Thread类包(封装)起来

thread.start()  #start之后就开始跑了

等待,还有一个东西Join()、setDaemon(True)  阻塞和守护线程

Join()  ==  当一些任务要先于另一些任务完成的时候,可以用

setDaemon   ==  当你觉得一些线程不重要的时候,可以设置守护线程。

对于非守护线程,就算主线程执行完了,也要等非守护进程完成才能退出

实例:一个抢车票的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值