什么是多任务?

简单地说,就是操作系统可以同时运行多个任务。

实现多任务有多种方式,线程、进程、协程。

多任务的概念:并行和并发

并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,

实现用多个任务“一起”执行

并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的

注意:

假的多任务--->并发(时间片轮转--cpu高速轮流执行)

真的多任务--->并行(cpu一个一个单独执行)

什么是线程?

可以简单理解为同一进程中有多个计数器,每个线程的执行时间不确定,

而每个进程的时间片相等,线程是操作系统调度执行的最小单位.

线程的创建(两种)

6.1thread(target=函数名)

6.2创建一个类(继承thread方法),里边必须有run方法,创建一个实例对象,

调用start的时候,start会自动调用run方法(其他函数和方法,都在run方法里边完成)

线程的创建步骤

import threading

# 创建一个线程对象

t1 = threading.Thread(target=func_name, args=(num,), name=”子线程名字”)

# 创建一个线程并启动

t1.start()

# 等待子线程执行完毕之后再继续向下执行主线程

t1.join()

备注:主线程会等待子线程结束之后才会结束,主线程一死,子线程也会死。

线程的调度是随机的,并没有先后顺序。

主线程和子线程

了解函数的调用和指向:

target=函数()------>调用函数 ; target=函数--->指向函数

3.1调用start的时候,子线程被创建;函数运行完,子线程结束

3.2主线程运行完不会结束,会等待子线程结束后,再结束

3.3如果主线程先结束了,所有剩下的子线程会被强制结束

3.4注意:线程的是没有先后顺序的

枚举函数enumerate的用法

定义:enumerate()是python的内置函数,在字典上是枚举、列举的意思。

用途:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,

同时列出数据和数据下标,一般用在 for 循环当中,通过threading.enumerate()就可以获取线程列表。

enumerate函数的应用(查看线程的数量):

threading.enumerate()可以创建一个线程列表,可以通过列表的长度查看线程的数量

thread和start,哪个执行时候创建对象、执行线程:

1.调用thread,不会创建线程,只是创建一个对象

2.当调用thread创建出来的实例对象的start方法的时候,才会创建线程以及让这个线程开始运行

多线程-共享全局变量

优缺点:

在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据

缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱

导致的问题:

如果多个线程同时对一个全局变量操作,会出现资源竞争问题,从而数据结果会不正确

注意:

target指定将来这个线程去哪个函数执行代码

args指定将来调用函数的时候,传递什么数据过去-->元祖要加 “,”

只有在修改指向的时候,才会修改全局变量

什么是同步:

同步就是协同步调,按预定的先后次序进行运行

同步的作用:

解决线程同时修改全局变量的方式

互斥锁--解决资源竞争的问题

互斥锁是怎么引入的?

当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制,

线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁

互斥锁的构建流程

某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他线程才能再次锁定该资源。

互斥锁的作用

互斥锁保证了每次只有一个线程进行写入操作,保证了多线程情况下数据的正确性。

什么是死锁:

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源

并且同时等待对方的资源,就会造成死锁

如何避免死锁:(两种方法)

1.银行家算法

2.添加超时函数timeout()

python中的多任务--线程的更多相关文章

  1. Python中进程和线程的总体区别

    Num01–>线程 线程是操作系统中能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一个线程指的是进程中一个单一顺序的控制流. 一个进程中可以并发多条线程,每条线程并行 ...

  2. python中GIL和线程与进程

    线程与全局解释器锁(GIL) 一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资 ...

  3. python中进程、线程、协程简述

    进程 python中使用multiprocessing模块对进程进行操作管理 进程同步(锁.信号量.事件) 锁 —— multiprocessing.Lock 只要用到了锁 锁之间的代码就会变成同步的 ...

  4. python中的多任务

    多任务 什么是任务 一个电脑运行这的软件 什么是多任务 电脑同时运行着的多个软件 多任务原理 时间片的轮转 并行与并发 并发:假的多任务,多个任务共用一个核 并行:正的多任务,一个核处理一个程序 生理 ...

  5. Python中如何使用线程池和进程池?

    进程池的使用 为什么要有进程池?进程池的概念. 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务. 那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程 ...

  6. python中的守护线程

    什么是守护线程:在后台运行,为其他线程提供服务的线程成为守护线程. 为什么要引入守护线程: thread模块不支持守护线程的概念,当主线程退出时,所有的子线程都将终止,不管它们是否仍在工作, 如果你不 ...

  7. python中线程和进程(一)

    目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...

  8. Python 中多线程共享全局变量的问题

    写在前面不得不看的一些P话: Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量g_num (默认是0)进行 ...

  9. python多任务-线程

    目录 多任务的概念 线程基础 单线程执行 多线程执行 主线程会等待所有子线程结束后才结束 查看线程数量 线程-注意点 线程执行代码的封装 线程的执行顺序 总结 多任务的概念 什么叫"多任务& ...

随机推荐

  1. Java中IO软件包的详细介绍

    一.Java Io流 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为" ...

  2. Java实现提取拼音首字母

    在很多软件中,输入拼音的首写字母就可以快速定位到某个词条.比如,在铁路售票软件中,输入: "bj"就可以定位到"北京".怎样在自己的软件中实现这个功能呢?问题的 ...

  3. java实现第七届蓝桥杯愤怒小鸟

    愤怒小鸟 题目描述 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和B) 以时速 10米/秒 相对行驶. 愤怒的小鸟从A车出发,时速50米/秒,撞向B车, ...

  4. java实现第四届蓝桥杯连号区间数

    连号区间数 题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R] 里的所有元素(即此排列的第L个到第R ...

  5. PAT 部分A+B

    正整数​​A的“DA(为 1 位整数)部分”定义为由A中所有DA组成的新整数PA,例如:给定A=3862767,DA=6,则A的“6 部分”PA是 66,因为A中有 2 个 6. 现给定A,DA,B, ...

  6. 对LinkedList源码的一些个人理解

    由于转行的原因,最近打算开始好好学习,昨天看到了部分的LinkedList源码,并且看了一点数据结构的视频,现总结部分自己的心得体会,以供后期给现在的自己拍砖~ 双向链表每一个元素都有数据本身加指向前 ...

  7. N47-冯天驰-学习进度计划表

          马哥就业课程学习进度规划--N47-冯天驰 第一周 6.1-6.7                                                       8. 06- ...

  8. Spring AOP学习笔记02:如何开启AOP

    上文简要总结了一些AOP的基本概念,并在此基础上叙述了Spring AOP的基本原理,并且辅以一个简单例子帮助理解.从本文开始,我们要开始深入到源码层面来一探Spring AOP魔法的原理了. 要使用 ...

  9. 【网页设计】第四周 JavaSript

    第四周  JSP 一  JSP概述 含义: Java Server Pages, 广泛使用的服务器端脚本语言之一:(运行在服务器端  BS结构) 由服务器端的JSP引擎执行JSP代码,然后将结果以HT ...

  10. java中的引用类型:强软弱虚

    java中的引用类型共4种:强软弱虚,具体每种类型的特点和应用场景.记录下.本文是看了马士兵老师的视频后记录整理的.加深印象. 基本概念 1. 强引用 强引用是使用最普遍的引用.如果一个对象具有强引用 ...