当前位置: 首页 > news >正文

Python笔记之线程库threading

Python笔记之线程库threading

在这里插入图片描述

参考博文
Python多线程笔记——简单函数版和类实现版

code review!

Python 的 threading 库用于在程序中创建和管理线程。线程允许程序并发执行多个任务。以下是 threading 库的详解和一些简洁示例。

基本概念

  • 线程:在一个进程中,一个线程是执行指令的单独路径。
  • 主线程:每个程序启动时都会有一个默认的主线程。
  • GIL(全局解释器锁):Python 的线程受到 GIL 的限制,不能真正并行地运行 CPU 绑定的任务,但在 I/O 密集型任务中仍然可以提高性能。

重要类和方法

  • Thread 类:用于创建线程。
    • start(): 开始线程活动。
    • join(): 阻塞调用线程,直到被调用的线程终止。
    • run(): 线程活动的方法。
  • Lock 类:用于线程间同步,防止竞争条件。
  • RLock 类:可重入锁,允许在同一线程中多次获得锁。
  • Condition 类:用于线程间通信。
  • Semaphore 类:控制对共享资源的访问。
  • Event 类:用于线程间信号通信。

简单示例

1. 创建并启动线程
import threadingdef print_numbers():for i in range(5):print(i)# 创建线程
thread = threading.Thread(target=print_numbers)# 启动线程
thread.start()# 等待线程完成
thread.join()print("Thread has finished execution.")
2. 使用锁同步线程
import threadingcounter = 0
lock = threading.Lock()def increment_counter():global counterwith lock:for _ in range(10000):counter += 1threads = [threading.Thread(target=increment_counter) for _ in range(2)]for thread in threads:thread.start()for thread in threads:thread.join()print(f"Final counter value: {counter}")
3. 创建自定义线程类
import threadingclass MyThread(threading.Thread):def run(self):for i in range(5):print(f"Thread {self.name}: {i}")# 实例化并启动自定义线程
thread = MyThread()
thread.start()
thread.join()

注意事项

  • 线程安全:在访问共享数据时使用锁确保线程安全。
  • 性能:对于 CPU 密集型任务,考虑使用 multiprocessing 模块。
  • 调试:调试多线程程序可能会比较困难,可以使用日志记录来帮助调试。

这些示例展示了如何使用 threading 库创建和管理线程,以及如何解决常见的同步问题。

相关文章:

Python笔记之线程库threading

Python笔记之线程库threading 参考博文 Python多线程笔记——简单函数版和类实现版 code review! Python 的 threading 库用于在程序中创建和管理线程。线程允许程序并发执行多个任务。以下是 threading 库的详解和一些简洁示例。 基本概念 线程:在一个进程中&a…...

go 包管理

Go语言所依赖的所有的第三方库都放在GOPATH目录下面 gomodule是Go语言默认的依赖管理工具 Modules是相关Go包的集合,是源代码交换和版本控制的单元,用于指定使用哪些源文件 GO111MODULEoff禁用gomodule,编译时从GOPATH和vendor文件夹中查找包…...

Js内建对象

数组解构 const arr ["1","2","3"]let a,b,c// 解构赋值 //将数组的第一个元素赋值给第一个变量,第二个元素赋值给第二个变量,依次类推[a,b,c] arr console.log(a,b,c) // 1 2 3 // 声明变量同时解构 let [a,b,c] [&qu…...

AXI接口的实现逻辑和底层原理,在FPGA中如何实现AXI接口,一篇文章足以搞明白!!!

AXI(Advanced eXtensible Interface)接口是一个点对点的接口,用于连接高性能的片上系统(SoC)中的处理器、外围设备、内存和其他IP核。以下是对AXI接口的详细解析,包括FPGA实现的原理、逻辑、速度以及详细的…...

《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析

本文是将文章《GBDT 算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 公式(11-12)是GBDT算法中非常关键的一步,它表示了如何通过计算损失函数的负梯度来指导下一棵树的生长。 公式(11-12)如下: r m i − [ ∂ …...

mysql设计

大家好,我是捡田螺的小男孩。 昨天一位粉丝,咨询了一个并发的问题~ 我提供了一个乐观锁兜底的方案,然后发现他们的表,都没有加version字段的,我想到,这不是表设计通用字段嘛。因此,本文跟大家聊聊&#xf…...

Android 斗鱼面经

Android 斗鱼面经 文章目录 Android 斗鱼面经一面二面 一面 先简单描述一下JVM JRE JDK的关系 :::info JVM(Java Virtual Machine) Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作…...

【机器学习】26. 聚类评估方法

聚类评估方法 1. Unsupervised Measure1.1. Method 1: measure cohesion and separationSilhouette coefficient Method 2:Correlation between two similarity matricesMethod 3:Visual Inspection of similarity matrix 2. Supervised measures3. 决定…...

linux 最多能创建多少个 TCP 连接?

linux 最大允许TCP连接数 约束一&#xff1a;服务器的端口范围约束二&#xff0c;服务器文件描述符限制约束三&#xff1a;系统线程约束四&#xff1a;系统内存总结 tcp连接四元组&#xff1a;源ip&#xff0c;源端口 <> 目标ip&#xff0c;目标端口 连续对同一个目标ip及…...

我为何要用wordpress搭建一个自己的独立博客

我在csdn有一个博客&#xff0c;这个博客是之前学习编程时建立的。 博客有哪些好处呢&#xff1f; 1&#xff0c;可以写自己的遇到的问题和如何解决的步骤 2&#xff0c;心得体会&#xff0c;经验&#xff0c;和踩坑 3&#xff0c;可以转载别人的好的技术知识 4&#xff0c;宝贵…...

Linux系统每日定时备份mysql数据

一、创建存储脚本的文件夹 创建文件夹&#xff0c;我的脚本放在/root/dbback/mysql mkdir ... cd /root/dbback/mysql 二、编写脚本 vi backup_mysql.sh 复制脚本内容 DB_USER"填写用户名" DB_PASSWORD"填写密码" DB_NAME"数据库名称" # …...

书生大模型第一关Linux基础知识

任务一&#xff1a;完成SSH连接与端口映射并运行hello_world.py 1.SSH及其端口映射 2.在VSCode中安装插件&#xff1a; 3.创建开发机 最后点击创建&#xff0c;然后可能需要等待一段较长的时间&#xff0c;大概需要5分钟左右&#xff0c;如果需要排队则更长时间 然后选择…...

机器学习之fetch_olivetti_faces人脸识别--基于Python实现

fetch_olivetti_faces 数据集下载 fetch_olivetti_faceshttps://github.com/jikechao/olivettifaces sklearn.datasets.fetch_olivetti_faces(*, data_homeNone, shuffleFalse, random_state0, download_if_missingTrue, return_X_yFalse, n_retries3, delay1.0)[source] L…...

【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程

在现代Web开发中&#xff0c;缓存机制扮演着至关重要的角色。它不仅提升了用户体验&#xff0c;还极大地优化了资源的使用效率。在这篇博文中&#xff0c;我们将从“Read-Through”缓存的概念出发&#xff0c;深入探讨HTTP缓存的工作原理和交互流程&#xff0c;并详细描述max-a…...

FLINK单机版安装部署入门-1

文章目录 FLINK单机版安装部署高于1.9.3需要修改配置文件flink-conf.yaml(低于1.9.3可以跳过)linux启动集群windows下启动Flink实例运行(单机)还有一种方式是上传任务包运行examples\streamingjava: Compilation failed: internal java compiler error高版本启动脚本 FLINK单机…...

深度学习-学习率调整策略

在深度学习中&#xff0c;学习率调整策略&#xff08;Learning Rate Scheduling&#xff09;用于在训练过程中动态调整学习率&#xff0c;以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。下面介绍一些常见的学习率调整策…...

【学员提问bug】小程序在onUnload里面调接口,用来记录退出的时间, 但是接口调用还没成功, 页面就关闭了。如何让接口在onUnload关闭前调用成功?

这种问题比较通用&#xff0c;并不涉及到具体方法执行障碍&#xff0c;所以&#xff0c;解决起来也不麻烦。但是新手往往不知道如何做。 在小程序中&#xff0c;如果在 onUnload 中调用 API 记录页面退出时间&#xff0c;但因为页面关闭速度较快导致请求未完成&#xff0c;可以…...

【刷题13】链表专题

目录 一、两数相加二、两两交换链表的节点三、重排链表四、合并k个升序链表五、k个一组翻转链表 一、两数相加 题目&#xff1a; 思路&#xff1a; 注意整数是逆序存储的&#xff0c;结果要按照题目的要求用链表连接起来遍历l1的cur1&#xff0c;遍历l2的cur2&#xff0c;和…...

Python Turtle模块详解与使用教程

Python Turtle模块详解与使用教程 引言 Python是一种广泛使用的编程语言&#xff0c;其简洁易读的语法使得它成为初学者学习编程的理想选择。而Turtle模块则是Python标准库中一个非常有趣且实用的图形绘制工具&#xff0c;特别适合用于教育和学习编程的基础知识。通过Turtle模…...

【PTA】4-2 树的同构【数据结构】

给定两棵树 T1​ 和 T2​。如果 T1​ 可以通过若干次左右孩子互换就变成 T2​&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 图一…...

AI智能体长期记忆系统:从RAG到Memory-Skill的工程实践

1. 项目概述&#xff1a;一个关于“记忆”的AI技能最近在折腾AI智能体&#xff08;Agent&#xff09;和RAG&#xff08;检索增强生成&#xff09;相关的东西&#xff0c;发现一个挺有意思的GitHub项目&#xff0c;叫memory-skill。光看名字&#xff0c;你可能会觉得这是个简单的…...

Adafruit IO物联网平台:从零构建环境监测与报警系统

1. 项目概述&#xff1a;为什么你需要一个像Adafruit IO这样的物联网平台&#xff1f;如果你玩过Arduino、树莓派或者任何单片机&#xff0c;肯定遇到过这样的场景&#xff1a;费了老大劲写代码让传感器读出数据&#xff0c;结果这些数据要么在串口监视器里一闪而过&#xff0c…...

如何像管理代码一样构建个人技能树:从知识管理到职业发展

1. 项目概述与核心价值最近在整理个人知识库和技能树时&#xff0c;发现了一个挺有意思的项目&#xff0c;叫mxyhi/ok-skills。乍一看&#xff0c;这像是一个个人仓库&#xff0c;但深入探究后&#xff0c;我发现它远不止是一个简单的代码托管。它更像是一个结构化的个人能力发…...

在Nodejs后端服务中集成多模型API实现智能客服

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Nodejs后端服务中集成多模型API实现智能客服 构建一个智能客服系统时&#xff0c;开发者常常面临模型选择的两难&#xff1a;既要…...

从零构建μC/OS-II硬件抽象层:以ARM7 LPC2292为例详解移植核心

1. 项目概述与核心思路十年前&#xff0c;我第一次把μC/OS-II从一个ARM7开发板搬到另一个不同型号的ARM7芯片上&#xff0c;光是改启动文件和中断向量表就折腾了一周。那时候我就想&#xff0c;要是有一套标准化的“中间层”&#xff0c;能把芯片底层的差异给屏蔽掉&#xff0…...

用C++和Eigen库手把手实现UR3机械臂逆解(附完整代码与避坑指南)

从理论到实践&#xff1a;基于Eigen库的UR3机械臂逆运动学完整实现指南 在工业自动化和机器人研究领域&#xff0c;六轴协作机械臂因其灵活性和广泛的应用场景而备受关注。UR3作为Universal Robots旗下的紧凑型协作机械臂&#xff0c;凭借其轻量化设计和用户友好特性&#xff0…...

Translumo完整指南:5分钟掌握Windows实时屏幕翻译神器,彻底告别语言障碍

Translumo完整指南&#xff1a;5分钟掌握Windows实时屏幕翻译神器&#xff0c;彻底告别语言障碍 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirro…...

Hive 3.1.2 避坑指南:手把手解决‘Metastore未初始化’及分区表数据导入那些事儿

Hive 3.1.2 实战避坑&#xff1a;从Metastore初始化到分区表优化的全链路解决方案 当你在Ubuntu 18.04上刚完成Hive 3.1.2的安装&#xff0c;满心欢喜准备大展拳脚时&#xff0c;命令行却无情地抛出"Hive metastore database is not initialized"的错误提示——这场景…...

Synology Photos人脸识别补丁:3步解锁x86设备AI照片管理能力

Synology Photos人脸识别补丁&#xff1a;3步解锁x86设备AI照片管理能力 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 你是否在使用DS918等x86架构…...

逆向实战:用X32dbg条件断点精准定位MFC程序的窗口消息处理函数

逆向实战&#xff1a;用X32dbg条件断点精准定位MFC程序的窗口消息处理函数 在逆向分析领域&#xff0c;MFC程序因其复杂的消息映射机制和封装层次&#xff0c;常常让分析者感到无从下手。特别是当我们需要分析某个特定窗口消息&#xff08;如按钮点击、菜单选择&#xff09;的处…...