返回顶部
首页 > 资讯 > 后端开发 > Python >Python基础学习之认识线程
  • 393
分享到

Python基础学习之认识线程

2024-04-02 19:04:59 393人浏览 薄情痞子

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线程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python基础学习之认识线程

本文链接: https://lsjlt.com/news/140315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python基础学习之认识线程
    目录一、什么是线程?二、再来解释线程的代码三、线程触发业务函数,线程调用业务函数四、多了一个线程是哪个?五、总结一、什么是线程? 我们知道工人都是同时在工厂工作,复制各自的工作的。他...
    99+
    2024-04-02
  • shell编程基础之认识与学习BASH
    1、认识Bash 通过Shell将输入的指令与Kernel沟通,让Kernel控制硬件工作查看Shell:cat /etc/shell登录后预设的shell类型记录在/etc/passwd中,与账户相关命令...
    99+
    2022-06-04
    基础 shell BASH
  • python基础学习20----线程
    什么是线程   线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派...
    99+
    2023-01-30
    线程 基础 python
  • shell学习之编程基础知识
    有学过编程语言的同学们都能够很快入手shell因为基础的字符类型,循环语句与C语言也差不多。以下我们来了解以下新手基础:1.在学习循环语句之前先了解一些基础的字符信息:$0、$1、$2、$、$*、$#$0 ...
    99+
    2024-04-02
  • python学习之认识fabric
    fabric是啥?Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application depl...
    99+
    2023-01-31
    python fabric
  • Python 基础知识学习
    1、Python 基础教程      Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。2、执行Python程序     实例(Python 2.0+)     print "Hello, World!";  3、环境搭建...
    99+
    2023-01-31
    基础知识 Python
  • Springboot基础学习之初识SpringBoot
    目录一、图示二、springboot是什么三、spring是如何简化开发的?四、springboot五、第一个spingboot程序一、图示 spring再简化:SpringBoot...
    99+
    2024-04-02
  • Python基础知识学习之类的继承
    目录一、继承的格式二、单继承三、多继承四、重写父类方法五、打印继承关系六、调用父类方法七、私有属性与方法一、继承的格式 类的继承格式如下,括号中的为父类名。 class 类名(父...
    99+
    2024-04-02
  • C#多线程学习之基础入门
    目录同步方式异步多线程方式异步多线程优化异步回调异步信号量异步多线程返回值异步多线程返回值回调线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进...
    99+
    2024-04-02
  • python学习之路--python基础
    本文主要介绍下python列表的的一些基本操作 列表是我们在python编程中常用的数据类型之一,通过列表我们可以对数据实现最方便的存储、修改等操作。 定义列表  1 names=['ZhangSan','LiSi','WangWu'] ...
    99+
    2023-01-30
    之路 基础 python
  • Spring5学习之基础知识总结
    目录1.概述2.入门Demo3.源码1.概述 1、Spring 是轻量级的开源的 JavaEE 框架 2、 Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部...
    99+
    2024-04-02
  • 机器学习之基础知识(全)
    目录 1.机器学习概述 1.1 人工智能概述 1.1.1 人工智能使用场景 1.1.2 人工智能小案例 1.2 人工智能发展历程 1.2.1 图灵测试 1.2.2 发展历程 1.2.3 小结 1.3 人工智能主要分支 1.3.1 人工智能、...
    99+
    2023-08-31
    机器学习
  • python基础学习之 特征工程
      一、特征提取  字典加载特征:DictVectorizer  文本特征提取:词频向量(CountVectorizer)TF-IDF向量(TfidfVectorizer,FfidfTransformer) 特征哈希向量(HashingVe...
    99+
    2023-06-02
  • Python线程之认识线程安全
    目录一、什么是线程安全?二、在Python中有哪些类是线程安全的?三、如何做到真正线程安全?1.无状态函数2.另一种 化繁为简一、什么是线程安全? 线程安全,名字就非常直接,在多线程...
    99+
    2024-04-02
  • python基础学习之递归函数知识总结
    目录一、递归函数使用注意点二、递归的效率问题三、递归函数引入四、递归的深度五、通过缓存解决递归限制六、递归函数使用示例一、递归函数使用注意点 递归函数一定要编写终止条件,否则将产生无...
    99+
    2024-04-02
  • Python基础学习教程:Python基础之基本数据类型(一)
    Python基础学习教程:Python基础之基本数据类型(一)...
    99+
    2023-06-02
  • mysql基础知识学习
     1      说明数据库的命令时不区分大小写的,例如“CREATE DATABASE test”与“create database t...
    99+
    2024-04-02
  • 学习nginx基础知识
    目录一.什么是nginx?二.nginx能干什么?2.1 什么是正向代理?2.2 什么是反向代理?2.3负载均衡2.4 动静分离三.nginx基本操作3.1 nginx配置文...
    99+
    2024-04-02
  • Java多线程Thread基础学习
    目录1. 创建线程   1.1 通过构造函数:public Thread(Runnable target, String name){}  或:publ...
    99+
    2023-05-17
    Java多线程 Java 多线程Thread
  • python基础一(认识python及基
    前言:    这个博客的就是笔者用来作总结的,只会写出一些必要的东西,所以并不适合一个初学者看一、python是什么    Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着...
    99+
    2023-01-31
    基础 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作