Python多线程,守护线程和非守护线程,线程的join方法,代码案例

liftword1个月前 (03-31)技术文章5

守护线程和非守护线程

守护线程&&非守护线程

守护线程,是和主线程一起结束的线程,叫守护线程,非守护线程,主线程的结束不影响该线程的执行,主线程结束非守护线程不会立刻结束,也叫用户线程。

Python的守护线程

Python多线程默认情况(设置线程setDaemon(False)),主线程执行完自己的任务后,就退出了,此时子线程会继续执行自己的任务,直到子线程任务结束。

开启线程的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)

if __name__ == '__main__':
  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)

线程的join方法

join()方法

join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,如果主线程等待timeout,子线程还没有结束,则主线程强制结束子线程。

非守护线程(线程daemon属性为False), join函数的timeout参数无效,主线程会一直等待子线程结束。

非守护线程(线程daemon属性为True),join函数的timeout参数是有效的, 主线程会等待timeout时间后,结束子线程。如果同时有N个子线程join(timeout),实际上主线程会等待的超时时间最长为:N * timeout, 即每个子线程的超时开始时刻是上一个子线程超时结束的时刻。

代码案例

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(3)
      print("线程%s运行结束" % self.name)

if __name__ == '__main__':
  threading_list = []
  start_time = time.time()
  for x in range(20):
    t = MyThreading(x)
    t.start()
    threading_list.append(t)

  for x in threading_list:
    # 为线程开启同步
    x.join()    

  end_time = time.time()
  print("20个线程一共的运行时间为:", end_time-start_time)

相关文章

python笔记47:多线程详解

主要内容:小目标:掌握多线程;主要内容:线程类使用,多线程使用;1. 线程基本概念线程概念:线程是轻量级进程,是操作系统能够进行运算调度的最小单位;线程依赖进程资源,是进程中的实际运作单位;一个进程中...

Python并发编程(3)——Python多线程详解介绍

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料Python 的多线程入门是非常简单的,直接导入threading模块就可以开始多线程...

Python多线程编程到底怎么玩?核心技巧与注意事项全知道!

在 Python 中,多线程编程主要用于处理 I/O 密集型任务(如网络请求、文件读写、数据库操作等),但由于 全局解释器锁(GIL) 的存在,多线程对 CPU 密集型任务 的性能提升有限(此时建议使...

小白都看懂了,Python 中的线程和进程精讲,建议收藏

目录线程和进程一、 什么是进程 / 线程1、 引论众所周知,CPU是计算机的核心,它承担了所有的计算任务。而操作系统是计算机的管理者,是一个大管家,它负责任务的调度,资源的分配和管理,统领整个计算机硬...

Python多线程

本文重点探究以下几个问题:多线程内存共享线程类获取线程结果方法:join/setDaemon对线程退出的作用线程无法利用多核,不是真正的并发多线程内存共享多个线程访问同一内存变量时,需要通过锁机制来实...

了解 Python 中的多线程和多处理

在软件开发领域,提高应用程序的效率和性能通常是通过多线程或多处理来实现的。这些技术允许程序同时执行多个任务,从而更好地利用系统资源并加快执行时间。在 Python 中,多线程和多处理都可用于不同的场景...