从零玩转CanMV-K230(8)-多线程例程

文章目录

  • 前言
  • 一、_thread模块API
  • 二、使用示例
    • 创建并启动线程
    • 停止线程
    • _thread.exit()
  • 总结


前言

K230上不支持threading,只能支持_thread,该模块实现了相应 CPython 模块的子集,CPython 是 Python 编程的参考实现 语言,也是最著名的一种。然而,它是众多 实现(包括 Jython、IronPython、PyPy 和 MicroPython)。 虽然 MicroPython 的实现与 CPython 有很大不同, 它旨在保持尽可能多的兼容性


一、_thread模块API

_thread.LockType
这是 lock 对象的类型。_thread.start_new_thread(函数, args[, kwargs])
启动新线程并返回其标识符。线程使用参数 list args(必须是 Tuples)执行函数函数。可选的 kwargs 参数指定关键字参数的字典。当函数 返回,则线程会静默退出。当函数以 unhandled 异常,则会打印堆栈跟踪,然后线程退出(但 其他线程继续运行)。_thread.interrupt_main()
在主线程中引发异常。子线程可以 使用此功能可中断主线程。_thread.exit()
引发异常。如果未捕获,这将导致 thread 以静默方式退出。_thread.allocate_lock()
返回新的 lock 对象。锁的方法如下所述。该锁是 最初解锁。_thread.get_ident()
返回当前线程的 'thread identifier'。这是一个非零 整数。它的值没有直接的意义;它旨在作为一个神奇的 cookie 来 例如,用于索引特定于线程的数据的字典。线程标识符 当一个线程退出并创建另一个线程时,可能会被回收。_thread.stack_size([大小])
返回创建新线程时使用的线程堆栈大小。可选的 size 参数指定要用于后续创建的堆栈大小 threads 的 URL 中,并且必须为 0(使用 platform 或 configured default)或正数 整数值至少为 32,768 (32 KiB)。如果未指定 size, 使用 0。如果更改线程堆栈大小是 unsupported,则引发 a。如果指定的堆栈大小为 invalid,则引发 a 且堆栈大小未修改。32 KiB 是当前支持的最小堆栈大小值,以保证足够 stack 空间。请注意,某些平台可能具有 对堆栈大小值的特定限制,例如要求 最小堆栈大小> 32 KiB 或需要按系统的倍数分配 内存页面大小 - 应参阅平台文档了解更多信息 信息(4 KiB 页很常见;使用 4096 的倍数作为堆栈大小为 在没有更具体信息的情况下建议的方法)。 可用性: Windows,具有 POSIX 线程的系统。_thread.TIMEOUT_MAX
timeout 参数允许的最大值。指定大于此值的超时将 引发 .Lock.acquire()lock.acquire(waitFlag=1,超时=-1)
如果没有任何可选参数,此方法将无条件获取锁,如果 需要等待,直到它被另一个线程释放(只有一个线程在 时间可以获得一把锁——这就是它们存在的原因)。如果存在整数 waitflag 参数,则操作取决于其 value:如果为零,则只有在可以获取锁的情况下才会获取锁 立即不等待,如果为非零,则获取锁 无条件地如上所述。如果存在浮点超时参数且为正数,则 指定返回前的最长等待时间(以秒为单位)。负 timeout 参数指定无界等待。不能指定 如果 WaitFlag 为零,则为 Timeout。返回值是是否成功获取锁,如果未成功获取。TrueFalselock.release()
释放锁。该锁必须是较早获得的,但不是 必须通过同一条线索。lock.locked()
返回锁的状态:如果它已被某个线程获取,如果没有。TrueFalse

二、使用示例

创建并启动线程

创建2个线程,分别进行打印

import _thread
import timedef task_1():while True:print("task 1")time.sleep(1)def task_2():while True:print("task 2")time.sleep(1)#创建闪灯task和串口task
_thread.start_new_thread(task_1, ())
_thread.start_new_thread(task_2, ())while True:time.sleep(0.01) #防止CPU满跑

在这里插入图片描述

停止线程

在python的介绍中,_thread并没有制定摧毁某个task的接口,只有在task调用的函数退出运行,也就是要退出task中的while,所以,我们可以使用一个flag,来决定while是否可以运行。

import _thread
import timetask_run_flag = Truedef task_1():global task_run_flagwhile task_run_flag:print("task 1")time.sleep(1)def task_2():global task_run_flagcount=0while True:count=count+1print("task 2")if count >10:task_run_flag=Falsetime.sleep(1)#创建闪灯task和串口task
_thread.start_new_thread(task_1, ())
_thread.start_new_thread(task_2, ())while True:time.sleep(0.01) #防止CPU满跑

在这里插入图片描述

_thread.exit()

调用_thread.exit()后,线程退出

import _thread
import timetask_run_flag = Truedef task_1():global task_run_flagwhile task_run_flag:print("task 1")time.sleep(1)def task_2():global task_run_flagcount=0while True:count=count+1print("task 2")if count >10:task_run_flag=False_thread.exit()time.sleep(1)#创建闪灯task和串口task
_thread.start_new_thread(task_1, ())
_thread.start_new_thread(task_2, ())while True:time.sleep(0.01) #防止CPU满跑

总结

本章节介绍了K230多线程的示例,大家可以根据项目实际需要参考API使用

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

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

相关文章

yii2 手动添加 phpoffice\phpexcel

1.下载地址:https://github.com/PHPOffice/PHPExcel 2.解压并修改文件名为phpexcel 在yii项目的vendor目录下创建一个文件夹命名为phpoffice 把phpexcel目录放到phpoffic文件夹下 查看vendor\phpoffice\phpexcel目录下会看到这些文件 3.到vendor\composer目录下…

数据库-用户管理

一、创建用户 create user xy104192..168.42.24 identified by 123456;xy104:用户名 localhost;这个权限最高的root用户 %:任务ip地址 192.168.42.24:登录的IP地址 identified by ‘123456’:指定该用户的密码 mysql…

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍:Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis 如果在没有开启认证的情况下,…

springboot集成websokcet+uniapp开发聊天原型验证(一)

1. 整体思路 群组聊天功能实现思路 需要为每个群组维护一个对应的集合(可以是 Set 等数据结构),用来存放该群组内所有在线用户的 WebSocketSession。当有消息发送到群组时,遍历该群组对应的集合,向其中的每个在线用户…

Linux -- 线程的优点、pthread 线程库

目录 线程的优点 pthread 线程库 前言 认识线程库 简单验证线程的独立栈空间 线程的优点 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少得多。 调度进程时,CPU 中有一个 cache(缓存,提高运行效率&#xff0…

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…

从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互

文章目录 前言1. 下载运行Ollama2. 安装大语言模型3. 安装Cpolar工具4. 配置公网地址5. 固定公网地址6. MaxKB 添加Olama7.创建问答应用 前言 目前大语言模型(LLM)已经成为了人工智能领域的一颗璀璨明星,从自然语言处理到智能问答系统&#…

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件:银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的:将非数值特征转换为数值型,以便模型能够处理。方法: 地理位置&am…

回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测

回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-LSSVM卷积神经网络结合最小二乘支持向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实现CNN-LSSVM…

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223

深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道 在现代后端开发中,表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证,同时提供人性化的错误提示,是每位开发者的必修课。在本文中…

掌握 Ansys ACP 中的参考方向:简化复杂的复合材料设计

概括 在复合材料分析领域,精度至关重要,尤其是在定义纤维方向和铺层时。Ansys ACP(Ansys Composite PrepPost)提供了强大的工具来建立参考方向,这是实现精确结构模拟的关键步骤。在本博客中,我们将揭开在 …

Vue2学习(一)——Vue简介、Vue指令与指令修饰符

一、Vue简介 Vue是一套用于构建用户界面的渐进式框架。 所谓渐进式就是循序渐进,不一定非得把Vue中的所有API都学完才能开发Vue,可以学一点开发一点。 Vue2官网地址:https://v2.cn.vuejs.org/ Vue3官网地址:https://cn.vuejs…

Redis--通用命令学习

目录 一、引言 二、基础命令 1.set 2.get 3.keys 3.1 keys ? 3.2 keys * 3.3 keys [abe] 3.4 keys [^] 3.5 keys [a-b] 4.exists 5.delete 6.expire 7.ttl 8.type 三、Redis中的过期策略(面试题) 1.惰性删除 2.定期删除 …

PostgreSQL 的历史

title: PostgreSQL 的历史 date: 2024/12/23 updated: 2024/12/23 author: cmdragon excerpt: PostgreSQL 是一款功能强大且广泛使用的开源关系型数据库管理系统。其历史可以追溯到1986年,当时由加州大学伯克利分校的一个研究团队开发。文章将深入探讨 PostgreSQL 的起源、…

WPS工具栏灰色怎么办

WPS离线不登录,开启工具栏等相关功能 当你在使用WPS的过程中,若因网络问题或其他特殊原因,导致无法登录使用WPS时,可根据以下步骤开启离线兼容模式,开启此模式后,可在未登录的状态下,激活并使用…

国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法

在安防监控领域,P2P技术因其去中心化的特性而受到关注,尤其是在远程视频监控和数据传输方面。P2P技术允许设备之间直接通信,无需通过中央服务器,这在提高效率和降低成本方面具有明显优势。然而,P2P技术在实际应用中也面…

com.google.common.collect.ImmutableList$SerializedForm

今天AndroidStudio安装了个2021版本的,gradle用了7.3.3,创建项目后控制台总是有这样一个错误: Unable to load class com.google.common.collect.ImmutableList$SerializedForm. This is an unexpected error. Please file a bug containing…

Docker部署Sentinel

一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…

HTMLCSSJavaScriptDOM 之间的关系?

一、HTML 中文名:超文本标记语言 英文名:HyperText Markup Language HTML是一种用来结构化Web网页及其内容的标记语言。 HTML 由一系列的元素组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或者工作。 图Ⅰ 每…

Hadoop集群(HDFS集群、YARN集群、MapReduce​计算框架)

一、 简介 Hadoop主要在分布式环境下集群机器,获取海量数据的处理能力,实现分布式集群下的大数据存储和计算。 其中三大核心组件: HDFS存储分布式文件存储、YARN分布式资源管理、MapReduce分布式计算。 二、工作原理 2.1 HDFS集群 Web访问地址&…