创建线程

news2024/12/28 19:33:27

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

由于线程是操作系统直接支持的执行单元,因此,高级语言(如Python、Java等)通常都内置多线程的支持。Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。

1  使用threading模块创建线程

threading模块提供了一个Thread类来代表一个线程对象,语法如下:

Thread([group [, target [, name [, args [, kwargs]]]]])

Thread类的参数说明如下:

l  group:值为None,为以后版本而保留。

l  target:表示一个可调用对象,线程启动时,run()方法将调用此对象,默认值为None,表示不调用任何内容。

l  name:表示当前线程名称,默认创建一个“Thread-N”格式的唯一名称。

l  args:表示传递给target()函数的参数元组。

l  kwargs:表示传递给target()函数的参数字典。

对比发现,Thread类和前面讲解的Porcess类的方法基本相同,这里就不再赘述了。下面,通过一个例子来学习一下如何使用threading模块创建线程。代码如下: 

# -*- coding:utf-8 -*-

import threading,time

def process():

    for i in range(3):

        time.sleep(1)

        print("thread name is %s" % threading.current_thread().name)

if __name__ == '__main__':

    print("-----主线程开始-----")

    threads = [threading.Thread(target=process) for i in range(4)] # 创建4个线程,存入列表

    for t in threads:

        t.start()                                  # 开启线程

    for t in threads:

        t.join()                                  # 等待子线程结束

    print("-----主线程结束-----")

上述代码中,创建了4个线程,然后分别用for循环执行次start()和jion()方法。每个子线程分别执行输出3次。运行结果如图15所示。

图15  创建多线程

注意:从图15中可以看出,线程的执行顺序是不确定的。

2  使用Thread子类创建线程

Thread线程类和Process进程类的使用方式非常相似,也可以通过定义一个子类,使其继承Thread线程类来创建线程。下面通过一个示例学习一下使用Thread子类创建线程的方式。

图标 (35)

  实例05  使用Thread子类创建线程

创建一个子类SubThread,继承threading.Thread线程类,并定义一个run()方法。实例化SubThread类创建2个线程,并且调用start()方法开启线程,程序会自动调用run()方法。代码如下:

# -*- coding: utf-8 -*-

import threading

import time

class SubThread(threading.Thread):

    def run(self):

        for i in range(3):

            time.sleep(1)

            msg = "子线程"+self.name+'执行,i='+str(i)# name属性中保存的是当前线程的名字

            print(msg)

if __name__ == '__main__':

    print('-----主线程开始-----')

    t1 = SubThread()                    # 创建子线程t1

    t2 = SubThread()                     # 创建子线程t2

    t1.start()                          # 启动子线程t1

    t2.start()                          # 启动子线程t2

    t1.join()                           # 等待子线程t1

    t2.join()                           # 等待子线程t2

    print('-----主线程结束-----')

运行结果如图16所示。

图16  使用Thread子类创建线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1840301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东h5st4.73

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! lianxi a15018601872 …

只有你相信,客户才会相信

我们外贸人在一起聊天的时候,可能最常说的话就是我们的产品不好做,出单太难了,是不是产品不行啊?但是又不知道什么产品好做,好不容易听到一款产品好做吧?自己又不懂,摸索不出来,因此…

洛谷 P1726:上白泽慧音 ← Tarjan算法

【题目来源】https://www.luogu.com.cn/problem/P1726【题目描述】 在幻想乡,上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新…

李宏毅2023机器学习作业HW06解析和代码分享

ML2023Spring - HW6 相关信息: 课程主页 课程视频 Sample code HW06 视频 HW06 PDF 个人完整代码分享: GitHub | Gitee | GitCode P.S. HW06 是在 Judgeboi 上提交的,出于学习目的这里会自定义两个度量的函数,不用深究,遵循 Sugge…

JS正则表达式构造函数和正则表达式字面量的区别

背景 笔者在使用正则表达式的过程中,经常看到两种使用方式,比较好奇这两种方式有什么不同。 一种是 正则表达式构造函数:new RegExp(“[xxx]”) 另一种是 正则表达式字面量: /[xxx]/ 于是,就去网上搜了一下…结果看到国…

【H5全行业数据大屏展示】—— 数据大屏分享

数据大屏展示是一种将大量数据以可视化形式展示在屏幕上的方式,可以帮助人们更直观地理解和分析数据。在各行各业中,数据大屏展示已经成为一种流行的工具,被广泛应用于数据分析、决策支持和业务监控等方面。在本文中,将分享一些数…

“论数据访问层设计技术及其应用”写作框架,系统架构设计师

论文真题 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模…

文件系统实验(操作系统)

文件系统实验 【预备知识】 1.文件系统的文件类型 为了便于用户利用终端进行输入和输出,UNIX系统做了专门安排。UNIX系统自动为用户打开3个文件:标准输入、标准输出和标准错误输出文件,文件描述符分别为0、1、2,缺省时&#xff0c…

分班查询,一键发布,老师们都在用的分班查询系统

老师们开学季马上又要到了,回想起了每年埋头苦干,对着一堆堆的学生名单,一个个手动分配班级,再一个个通知家长和学生的日子,那种手忙脚乱,生怕出错的紧张感,是不是还历历在目?每次分…

Instagram Reels API接口——高效获取用户主页Reels视频

一、引言 Instagram作为全球知名的社交媒体平台,近年来推出的Reels功能受到了广大用户的热烈欢迎。Reels以短视频的形式,让用户能够轻松创作和分享有趣、有创意的内容。为了帮助开发者、品牌和分析师更好地利用这一功能,我们推出了一款专注于…

从视频创意到传播策略 | 医药产品TVC新媒体传播方案

作为营销策划人,你一定在寻找能够激发创意灵感、拓展策划视野的实战案例。这份最新传播方案由Unithought精心打造,不仅是一份详尽的策划指南,更是一次深入患者心灵的品牌传播实践。 何策网,每日收录全网方案PPT ! 方…

手把手教你如何修复填补画图时间序列时出现的空白区域,Python向,Plotly库

填补画图时出现的空白区域,Python向,Plotly库 画图的烦恼美丽的plotly库首选安排时间序列的引索Index接下来我们安排plotly来画图继续修正图的格式 画图的烦恼 大家画时间序列的时候肯定遇到过画图没有软件里来的那么舒服,怎么画都会出现空白…

计算机顶级会议和顶级期刊

顶级会议 国际计算机设计会议(ICCD):由国际电气与电子工程师协会(IEEE)主办,是计算机体系结构领域的国际顶级会议之一,已经成功举办四十余届。 NeurIPS:全称神经信息处理系统大会&a…

机械臂 CoppeliaSim Simulink联合仿真

实现机械臂在CoppeliaSim(以前称为V-REP)和Simulink上的联合仿真涉及多个步骤,包括环境设置、模型导入、通信配置、控制算法设计和测试调试。 前期准备 安装软件配置工作环境创建和配置CoppeliaSim场景 导入机械臂模型配置机械臂参数在Simuli…

goldfish loss:减少训练数据泄漏,提高大语言模型输出的多样性

LLMs(大型语言模型)能够记忆并重复它们的训练数据,这可能会带来隐私和版权风险。为了减轻记忆现象,论文作者引入了一种名为"goldfish loss"的微妙修改,在训练过程中,随机抽样的一部分标记被排除在…

阿里云ECS(CentOS/Alibaba Cloud Linux)安装最新 Docker 方法

最近(6月份)我发现 docker 官方无法正常访问,docker pull 命令也执行失败,用 TZ 也一样😔。 以下步骤适用于 CentOS 7/8或Alibaba Cloud Linux 系统。 1. 更新系统包 首先,确保您的ECS实例系统软件包是最…

《Linux运维总结:基于ARM64架构CPU使用docker-compose一键离线部署alertmanager v0.27.0高可用集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面对不同的客户部署业务系统&#xff0…

ansible 模块进阶及变量

yum 模块进阶 - name: install pkgs hosts: webservers tasks: - name: install web pkgs # 此任务通过yum安装三个包 yum: name: httpd,php,php-mysqlnd state: present # 根据功能等,可以将一系列软件放到一个组中,安装软件包组,将会把很…

代码随想录第28天|回溯算法

491. 非递减子序列 思路: 不可以排序, 否则会改变元素的顺序对收获的结果有要求, num.size() > 2, 且 num[i - 1] < num[i]需要进行去重, 不能使用排序后的方法去重每一层可用 unordered_set 去重组合问题, for 遍历需要标记起始位置 bug: 一定要先判断元素是否重复, …

进阶篇06——锁

概述 全局锁 表级锁 表锁 元数据锁 元数据锁是系统自动加的&#xff0c;不需要我们手动执行命令添加。 意向锁 意向锁和元数据锁一样&#xff0c;也是在加行锁的时候自动给表加上相应的意向锁&#xff0c;不需要我们手动添加。 行级锁 行锁 读锁和读锁兼容&#xff0c;写锁…