2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python精选23集(多线程)

时间:04-26来源:作者:点击数:48

一.线程

1.1基本概念

①. 线程被称为轻量级的进程

②. 线程也可以使用计算机多核资源,是多任务编程方式

③. 线程是系统分配内核的最小单元

④. 线程可以理解为进程的分支任务

  • 线程与进程的理解图
    在这里插入图片描述

1.2基本特征

①. 一个进程中可以包含多个线程

②. 线程也是一个运行行为,消耗计算机资源

③. 一个进程中的所有线程共享这个进程的资源

④. 多个线程之间的运行互不影响各自运行

⑤. 线程的创建和销毁消耗资源远小于进程

⑥. 各个线程也有自己的ID等特征

1.3线程的创建

①.创建线程对象

  • from threading import Thread
  • t = Thread()
  • 功能:创建线程对象
  • 参数:target 绑定线程函数
  •    args 元组 给线程函数位置传参
  •    kwargs 字典 给线程函数键值传参

②.启动线程

  • t.start()

③.回收线程

  • t.join([timeout])

Demo【线程】

  • from threading import Thread
  • from time import sleep
  • import os
  • # 线程函数
  • def game():
  • for i in range(3):
  • sleep(2)
  • print(os.getpid(),"后裔:万箭齐发")
  • # 创建线程对象
  • t = Thread(target=game)
  • t.start() # 启动线程 执行game
  • for i in range(4):
  • sleep(1)
  • print(os.getpid(),"后裔:嗑药回血")
  • t.join() # 回收线程资源
在这里插入图片描述

Demo【线程传参】

  • from threading import Thread
  • from time import sleep
  • import os
  • # 含有参数的线程函数
  • def fun(sec,name):
  • print("线程函数参数",os.getpid())
  • sleep(sec)
  • print("%s 线程完毕"%name)
  • # 创建多线程
  • jobs = []
  • for i in range(5):
  • t = Thread(target=fun,args=(2,),kwargs={'name':"T%d"%i})
  • jobs.append(t)
  • t.start()
  • for i in jobs:
  • i.join()
在这里插入图片描述

1.4线程对象属性

  • t.name 线程名称
  • t.setName() 设置线程名称
  • t.getName() 获取线程名称
  • t.is_alive() 查看线程是否在生命周期
  • t.daemon 设置主线程和分支线程的退出关系
  • t.setDaemon() 设置daemon属性值
  • t.isDaemon() 查看daemon属性值
  • daemon为True时主线程退出分支线程也退出。要在start前设置,通常不和join一起使用。

Demo【对象属性】

  • from threading import Thread
  • from time import sleep
  • def fun():
  • sleep(3)
  • print("线程属性测试")
  • t = Thread(target=fun, name="MyThread")
  • # 主线程退出分支线程也退出
  • t.setDaemon(True)
  • t.start()
  • t.setName("MyThread")
  • print("Name:", t.getName()) # 线程名称
  • print("Alive:", t.is_alive()) # 线程生命周期
  • print("is Daemon", t.isDaemon())
在这里插入图片描述

二.自定义线程

2.1创建步骤

①.继承Thread类

②. 重写__init__方法添加自己的属性,使用super加载父类属性

③.重写run方法

2.2使用方式

①.实例化对象

②.调用start自动执行run方法

③.调用join回收线程

Demo【线程】

  • from threading import Thread
  • from time import sleep, ctime
  • class MyThread(Thread):
  • def __init__(self, target=None,
  • args=(), kwargs={}):
  • super().__init__()
  • self.target = target
  • self.args = args
  • self.kwargs = kwargs
  • def run(self):
  • self.target(*self.args, **self.kwargs)
  • # ***************************
  • # 通过完成上面的MyThread使程序正常运行
  • # 通过下面程序可以让player作为线程运行
  • # player只是测试函数,名称和参数均不确定
  • # ***************************
  • def player(sec, song):
  • for i in range(3):
  • print("Playing %s : %s" % (song, ctime()))
  • sleep(sec)
  • t = MyThread(target=player, args=(3,),
  • kwargs={'song': '凉凉'})
  • t.start()
  • t.join()
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门