【Python笔记】并发编程之多线程&多进程(第一章)

  • 线程是最小的执行单位,进程由至少一个线程组成。
  • 如何调度进程线程完全由操作系统决定。

一、关于GIL(全局解释器锁)

GIL会保证同时只能有一个线程运行。

在多线程环境中,Python 虚拟机会按照以下步骤执行:

  • 设置GIL。
  • 切换进一个线程去运行。
  • 执行下面操作之一。
    • 指定数量的字节码指令。
    • 线程主动让出控制权(可以调用time.sleep(0)来完成)。
  • 把线程设置回睡眠状态(切换出线程)。
  • 解锁GIL。
  • 重复以上步骤

二、什么是线程

  • 线程也称为轻量级进程与进程类似,不过他们是在同一个进程下执行的。
  • Python线程中的模块:thread & threading 模块
  • Python提供了多个模块支持多线程编程,包括threadthreadingQueue模块等。
  • threading相比thread模块提供了更高级别功能更全面的线程管理。

三、Python中线程的使用

1.线程的创建、启动、阻塞

关于threading.Thread 来生成一个类的对象。

  • 将常用到的参数有targetargstarget为需要调用的函数名称,args就是要传递进target函数的参数
  • 当传入参数args只有一个时,格式为:
    t=threading.Thread(target=loop,args=(3,))
  • t.start()来启动线程,t.join()来阻塞,一直等到线程完成。

2.关于线程的派生类

使用线程的派生类来操作很干净,整洁,容易维护

3.线程的停止

线程的停止,使用join()等待它结束,或者使用daemon(守护线程),当主线程完成,子线程自动退出。

关于守护线程
  • 避免使用thread模块的另一个原因是该模块不支持守护线程这个概念。当主线程退出时,所有子线程都将终止,不管完成与否。
  • 要将一个线程设置为守护线程,需要在启动线程之前执行thread.daemon = Ture

到这里我们可以理解为:主线程将在所有非守护线程退出之后才退出。

四、线程的创建方法

比较相似的三个方法:

  • 创建Thread的实例,传给它一个函数
  • 创建Thread的实例,传给它一个可调用的类实例
  • 派生Thread的子类,并创建子类的实例
并发编程的第二篇我们将选择第一和第三方案进行线程创建演示。
    原文作者:303Donatello
    原文地址: https://www.jianshu.com/p/7f160509e8b6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞