@

进程与线程

  1. 进程是程序执行的最小线程
  2. 一个进程由多个线程组成
  3. 进程之间相互独立,同一个进程各线程共享内存空间包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
  4. 调度和切换:线程上下文切换比进程上下文切换要快得多。

threading使用简介-1

threading.Thread(self, group=None, target=None, name=None, args=(), kwargs={})   
Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(init)中将可调用对象作为参数传入。
参数group是预留的,用于将来扩展;
参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行;
参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
参数args和kwargs分别表示调用target时的参数列表和关键字参数。

threading使用简介-2

Thread类还定义了以下常用方法与属性:
Thread.getName()/ Thread.name 用于获取线程的名称,有返回值,需要print打印出来。
Thread.setName() 用于设置线程的名称,没有返回值,print打印出来事None
Thread.ident 获取线程的标识符。线程标识符是一个非零整数,只有在调用了start()方法之后该属性才有效,否则它只返回None。
Thread.is_alive() /Thread.isAlive 判断线程是否是激活的(alive)。从调用start()方法启动线程,到run()方法执行完毕或遇到未处理异常而中断这段时间内,线程是激活的。
Thread.join([timeout]) 调用Thread.join将会使线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。

threading使用简介-3

Thread.join([timeout]) 调用Thread.join将会使主线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。

  1. 什么是子线程?
    包含在 threading.Thread中,里面均视为子线程。
  2. 什么是主线程?
    除了“不包含在Thread里面的程序”,UI界面和Main函数均为主线程,均可视为主线程。

threading使用简介-4

Thread类还定义了以下常用方法与属性:
python对于thread的管理中有两个函数:
Join()和setDaemon()  
join:如在一个线程B中调用thread1.join(),则thread1结束后,线程B才会接着threada.join()往后运行。   
setDaemon:主线程A启动了子线程B,调用B.setDaemaon(True),则主线程结束时,会把子线程B也杀死。必须在运行线程之前设置。
Thread.isDaemon()/ Thread.daemon 用于获取线程的名称,有返回值,需要print打印出来。