线程

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源

线程的执行:

导入threading模块

import threading

线程名 = threading.Thread(target=函数, args=(函数参数,函数参数,......))

开启线程

线程名.start()

如果开启多个线程需要执行完一个之后再执行其他的相关线程

线程1.start()

线程1.join()

线程2.start()

守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行

线程.setDaemon(True)

自定义线程类

import threading

class MyThread(threading.Thread):

  def __init__(self, name1, age):

    super().__init__()

    self.name1 = name1

    self.age = age

  def run(self):

    for i in range(5):

      msg = "i am" + self.name + "$$$" + str(i)

      print(msg)

if __name__ = "__main__":

  t1 = MyThread()

  t1.start()

python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。

线程方法中, 可以共用全局变量

  • 在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据
  • 缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)

当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制

线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。

互斥锁为资源引入一个状态:锁定/非锁定

某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性。

方法为:

创建

lock = threading.Lock()

上锁

lock.acquire()

解锁

lock.release()

查看所有的线程

threading.enumerate()

可用len()函数来判断线程内的数量

len(threading.enumerate())

列表可当做实参传入

t1 = threading.Thread(target = 函数, args=(123,123,123,  ))

也可以用字典的方式传入参数

t1 = threading.Thread(target = 函数, wkargs={键:值,  键: 值.......})

原文地址:https://www.cnblogs.com/hanzeng1993/p/9519483.html