【22】多线程

1. 什么是进程

一个正在运行的应用程序就是一个进程。系统会给每个进程分配一个独立的内存区域,用来保存程序运行过程中产生的数据,当进程结束的时候,这个内存区域会自动销毁。

2.什么是线程

  • 进程想要执行任务,就必须要有线程。每个进程默认都以一个线程,这个默认线程叫主线程,其他的线程叫子线程

  • 程序默认都是在主线程中执行的,

  • 一个线程中执行多个任务,任务是串行执行的(一个一个的按顺序执行)。

  • 一个进程中如果有多个线程执行任务的时候,是并行的(同时执行)。

3.python中怎么使用多线程

import threading
  • 通过内置的 threading模块来提供多线程相关技术
  • threading模块中有一个Tread类,这个类就是线程对象
①直接创建线程类的对象
threading.Thread(target=函数, args=参数)

函数 --function类型的变量;这个函数就会在子线程中执行
参数--元祖;这个元祖中的值会作为实参传给函数

②让线程开始执行任务
线程对象.start()
注意:某个线程出现异常,是线程直接结束;进程不一定结束,只有当所有的线程结束后,进程才结束。

4.创建线程子类

  • 声明一个类继承自Thread
  • 重写run方法,这个方法中的任务就是需要在子线程中执行的任务
  • 创建当前类的对象,就是线程对象
  • 启动子线程(线程对象调用start会自动在子线程中去调用run方法;直接用线程对象调用run方法,run方法会在主线程中执行)

5.join的用法

线程对象.join()

程序执行到这个地方会停下来(线程会阻塞),直到线程对象中的任务执行完成后才执行后面的语句

6.多线程共享数据

问题:多条线程对一个数据进行操作的时候,可能会出现数据安全/混乱问题。解决问题的方案就对公共的数据进行加锁。

加锁的方法
  • 一个公共数据对应一个锁对象
lock = Lock()    
  • 在获取数据前加锁,数据操作完成后解锁
lock.acquire(timeout='超时时间')  #加锁

lock.release()  #解锁

注意:加锁的部分会串行执行,但是没加锁发部分的妈妈还是并行

7.拷贝

①拷贝:将对象中的内容拷贝一份产生一个新的对象。
②浅拷贝和深拷贝:

  • 浅拷贝
新对象 = copy(对象)
  • 深拷贝
新对象 = deepcopy(对象)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    胜浩_ae28阅读 5,171评论 0 23
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,694评论 0 6
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 6,040评论 3 28
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 1,732评论 0 12
  • 0三、线程和进程的关系1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。2、...
    十二右阅读 2,834评论 0 0