Python基础学习之认识线程

 更新时间:2022年02月24日 09:51:29   作者:雷学委  
这篇文章主要介绍了Python线程,这篇开始我们将进入中级编程。处理更加复杂事情。比如本文的线程,咱们先从基础知识入手,需要的朋友可以参考下下面文章的详细内容

一、什么是线程?

我们知道工人都是同时在工厂工作,复制各自的工作的。他们就是一个一个独立运行的单位!

线程也是类似这样的一个独立的运行单位,多线程,就是多个独立的运行单位,同时执行同样的事情。

简单这样理解,后面会进行对比。

threading.Thread 类是Python中的线程类,它封装了线程的信息和一些同用的方法。

线程有状态,拿工人一天的状态来比喻很合适,早上上班,然后工作,有时候需要停下来休息,最后下班。

运行下面的代码看看:

import threading

mythread = threading.Thread()
print("mythread:", mythread)
print("is_alive:", mythread.is_alive())
mythread.start()
print("mythread:", mythread)
print("is_alive:", mythread.is_alive())

下面是运行结果:

建议读者先运行一下。

二、再来解释线程的代码

上面我们使用了threading这个库,然后创建Thread类的对象实例,赋值给mythread变量。

接着打印了对象和线程对象的一个函数is_alive()是否活跃状态。

两次都是False

但是第二次我们看到线程对象打印出来变成‘stopped’.

也就是说我们跑完了start函数(该函数为线程启动函数)之后,线程就进入stopped状态了。

上面那个就是线程,可是貌似啥也没做,我们下面让它做点事情呗。

三、线程触发业务函数,线程调用业务函数

比如这次的业务是:

def dianzan_guanzhu():
    now = datetime.datetime.now() #初始化时间变量
    name = "python萌新"
    print("%s name:%s" % (now, name)) #第一次打印时间和粉丝名字
    time.sleep(1)
    result = "好棒!" + name + " 关注雷学委,白嫖了好多知识和开发经验!"
    print("%s result:%s" % (now, result)) #第二次打印时间和粉丝活动
    return result

我们可以使用线程来调用。下面学委写了一个带参数的函数。 通过线程调用业务函数的时候指定:

  • target:设置为即将被调用的函数
  • kwargs: 如果有参数,直接通过传递一个k-v dict即可。
def dianzan_guanzhu(name):
    #省略一些代码

mythread = threading.Thread(target=dianzan_guanzhu, kwargs={"name": "python萌新"})

好下面,编写全部代码,使用线程来点赞,和直接调用

我们看看下面的代码:

import threading
import datetime
import time

"""学委定义了一个关注函数"""
def dianzan_guanzhu():
    now = datetime.datetime.now()
    name = "python萌新"
    print("%s name:%s" % (now, name))
    time.sleep(1)
    result = "好棒!" + name + " 关注雷学委,学到了好多知识和开发经验!"
    print("%s result:%s" % (now, result))
    return result


mythread = threading.Thread(target=dianzan_guanzhu)
print("mythread:", mythread)
print("is_alive:", mythread.is_alive())
mythread.start()
print("mythread:", mythread)
print("is_alive:", mythread.is_alive())
dianzan_guanzhu()
print("is_alive:", mythread.is_alive())

直接复制运行,这里我们这个dianzan_guanzhu函数被调用了两次

第一次是mythread.start函数。

第二次是我们直接脱离线程调用dianzan_guanzhu函数。

下面是运行结果:

好像没啥的样子。

再看一次,注意关注每次打印的时间,输入的时间好像错乱了?没错,不是眼花,是正确运行结果。

因为进入dianzan_guanzhu函数之后,初始化了now变量,这个时间固定了。

但是在线程外面也调用dianzan_guanzhu函数,所以这里是:两个线程在同时做同样的事情。

四、多了一个线程是哪个?

这里补充一下,我们写python脚本,运行代码的时候,本身是在一个主线程中的。

只是之前一直没解除线程概念,没写多线程程序,没有感知到这事情。

从现在开始,你要清楚知道:每个程序运行都有一个主线程。

回到结果,两个线程先后依次调用通过函数:

  • 首先,先后依次打印第一行输出。
  • 分开休眠了一秒(sleep(1))。
  • 最后,先后依次打印第二行输出。

五、总结

我们先把线程的基础知识搞懂。

  • 每个程序运行过程中至少有一个主线程
  • 需要启动更多线程使用Thread类来做, target参数用来绑定业务函数。启动线程用start函数。

到此这篇关于Python基础学习之认识线程的文章就介绍到这了,更多相关Python线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用requests库制作Python爬虫

    使用requests库制作Python爬虫

    Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。
    2018-03-03
  • Python中os模块的使用及文件对象的读写详解

    Python中os模块的使用及文件对象的读写详解

    这篇文章主要介绍了Python中os模块的使用及文件对象的读写详解,Python open() 方法用于打开一个文件,并创建返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError,需要的朋友可以参考下
    2023-08-08
  • 详解python读取matlab数据(.mat文件)

    详解python读取matlab数据(.mat文件)

    本文主要介绍了python读取matlab数据,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • selenium WebDriverWait类等待机制的实现

    selenium WebDriverWait类等待机制的实现

    这篇文章主要介绍了selenium WebDriverWait类等待机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python的Flask项目中获取请求用户IP地址 addr问题

    Python的Flask项目中获取请求用户IP地址 addr问题

    这篇文章主要介绍了Python的Flask项目中获取请求用户IP地址 addr问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Python Matplotlib绘制条形图的全过程

    Python Matplotlib绘制条形图的全过程

    Python画图主要用到matplotlib这个库,具体来说是pylab和pyplot这两个子库,这两个库可以满足基本的画图需求,下面这篇文章主要给大家介绍了关于Python Matplotlib绘制条形图的相关资料,需要的朋友可以参考下
    2021-10-10
  • pytorch--之halfTensor的使用详解

    pytorch--之halfTensor的使用详解

    这篇文章主要介绍了pytorch--之halfTensor的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用sklearn的cross_val_score进行交叉验证实例

    使用sklearn的cross_val_score进行交叉验证实例

    今天小编就为大家分享一篇使用sklearn的cross_val_score进行交叉验证实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 听歌识曲--用python实现一个音乐检索器的功能

    听歌识曲--用python实现一个音乐检索器的功能

    本篇文章中主要介绍了用python实现一个音乐检索器,类似于QQ音乐的摇一摇识曲,有兴趣的同学可以了解一下。
    2016-11-11
  • Python获取二维矩阵每列最大值的方法

    Python获取二维矩阵每列最大值的方法

    下面小编就为大家分享一篇Python获取二维矩阵每列最大值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论