什么是多线程:

  进程:正在运行的程序,QQ 360 ......

       线程:就是进程中一条执行程序的执行路径,一个程序至少有一条执行路径。(360中的杀毒 电脑体检 电脑清理 同时运行的话就需要开启多条路径)

  每个线程都有自己需要运行的内容,而这些内容可以称为线程要执行的任务。

  开启多线程是为了同时运行多部分代码。

  好处:解决了多部分需要同时运行的问题

  弊端:如果线程过多,会导致效率很低(因为程序的执行都是CPU做着随机 快速切换来完成的)

  • 线程与进程的区别
    • 线程共享内存,进程独立内存
    • 线程启动速度块,进程启动速度慢,运行时速度没有可比性
    • 同一个进程的线程间可以直接交流,两个进程想通信,必须通过一个中间代理来实现
    • 创建新线程很简单,创建新进程需要对其父进程进行一次克隆
    • 一个线程可以控制和操作同一线程里的其他线程,但是进程只能操作子进程

 

threading模块

  • 多线程的使用方式一:直接使用
    # -*- coding:utf-8 -*-
    # 线程使用的方式一
    import threading
    import time
    
    
    # 需要多线程运行的函数
    def fun(args):
        print("我是线程%s" % args)
        time.sleep(2)
        print("线程%s运行结束" % args)
    
    
    # 创建线程
    t1 = threading.Thread(target=fun, args=(1,))
    t2 = threading.Thread(target=fun, args=(2,))
    start_time = time.time()
    t1.start()
    t2.start()
    end_time = time.time()
    print("两个线程一共的运行时间为:", end_time-start_time)
    print("主线程结束")
    
    """
    运行结果:
    我是线程1
    我是线程2两个线程一共的运行时间为: 0.0010077953338623047
    主线程结束
    
    线程1运行结束
    线程2运行结束
    """
  • 线程的第二种使用方式:继承式调用
    # 继承式调用
    import threading
    import time
    
    
    class MyThreading(threading.Thread):
        def __init__(self, name):
            super(MyThreading, self).__init__()
            self.name = name
    
        # 线程要运行的代码
        def run(self):
            print("我是线程%s" % self.name)
            time.sleep(2)
            print("线程%s运行结束" % self.name)
    
    
    t1 = MyThreading(1)
    t2 = MyThreading(2)
    start_time = time.time()
    t1.start()
    t2.start()
    end_time = time.time()
    print("两个线程一共的运行时间为:", end_time-start_time)
    print("主线程结束")
    
    """
    运行结果:
    我是线程1
    我是线程2
    两个线程一共的运行时间为: 0.0010724067687988281
    主线程结束
    线程2运行结束
    线程1运行结束
    """

守护线程与join方法

  • 在Python多线程编程中,join方法的作用式线程同步。
  • 守护线程,是为守护别人而存在的,当设置为守护线程后,被守护的主线程不存在后,守护线程也自然不存在。

  

  • 第一种:python多线程默认情况
    • Python多线程默认情况(设置线程setDaemon(False)),主线程执行完自己的任务后,就退出了,此时子线程会继续执行自己的任务,直到子线程任务结束
    • 代码演示:threading中的两个创建多线成的例子都是。
  • 第二种:开启守护线程
    • 开启线程的setDaemon(True)),设置子线程为守护线程,实现主程序结束,子程序立马全部结束功能
    • 代码演示:
      # 守护线程
      import threading
      import time
      
      
      class MyThreading(threading.Thread):
          def __init__(self, name):
              super(MyThreading, self).__init__()
              self.name = name
      
          # 线程要运行的代码
          def run(self):
              print("我是线程%s" % self.name)
              time.sleep(2)
              print("线程%s运行结束" % self.name)
      
      
      t1 = MyThreading(1)
      t2 = MyThreading(2)
      start_time = time.time()
      t1.setDaemon(True)
      t1.start()
      t2.setDaemon(True)
      t2.start()
      end_time = time.time()
      print("两个线程一共的运行时间为:", end_time-start_time)
      print("主线程结束")
      守护线程

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-07-20
  • 2021-11-22
  • 2021-12-11
  • 2022-12-23
  • 2021-05-16
  • 2021-11-19
猜你喜欢
  • 2021-04-21
  • 2022-01-13
  • 2022-01-09
  • 2021-08-26
  • 2022-12-23
相关资源
相似解决方案