zoukankan      html  css  js  c++  java
  • 线程

    线程,有时被称为轻量级进程(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={键:值,  键: 值.......})

  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/hanzeng1993/p/9519483.html
Copyright © 2011-2022 走看看