美文网首页生活不易 我用pythonKali Linux程序猿阵线联盟-汇总各类技术干货
【Python笔记】并发编程之多线程&多进程(第一章)

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

作者: 简书这个地方快倒闭了 | 来源:发表于2017-05-10 16:45 被阅读88次
    • 线程是最小的执行单位,进程由至少一个线程组成。
    • 如何调度进程线程完全由操作系统决定。

    一、关于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的子类,并创建子类的实例

    并发编程的第二篇我们将选择第一和第三方案进行线程创建演示。

    相关文章

      网友评论

        本文标题:【Python笔记】并发编程之多线程&多进程(第一章)

        本文链接:https://www.haomeiwen.com/subject/apegtxtx.html