生活不易 我用pythonKali Linux程序猿阵线联盟-汇总各类技术干货

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

2017-05-10  本文已影响88人  简书这个地方快倒闭了
  • 线程是最小的执行单位,进程由至少一个线程组成。
  • 如何调度进程线程完全由操作系统决定。

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

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

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

二、什么是线程

  • 线程也称为轻量级进程与进程类似,不过他们是在同一个进程下执行的。
  • 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的子类,并创建子类的实例

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

猜你喜欢

热点阅读