從零玩轉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.pswp.cn/web/63992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63992.shtml
英文地址,請注明出處:http://en.pswp.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目錄下…

安卓多渠道apk配置不同簽名

一般簽名都是放在buildTypes里面: ... android {...defaultConfig {...}signingConfigs {release {storeFile file("myreleasekey.keystore")storePassword "password"keyAlias "MyReleaseKey"keyPassword "password"}}bu…

數據庫-用戶管理

一、創建用戶 create user xy104192..168.42.24 identified by 123456;xy104:用戶名 localhost;這個權限最高的root用戶 %:任務ip地址 192.168.42.24:登錄的IP地址 identified by ‘123456’:指定該用戶的密碼 mysql…

管理者需要的技能

管理者需要具備技術技能、人際技能和概念技能,這三種技能的內涵如下: 技術技能 專業知識與技術能力:指管理者掌握和運用某一專業領域內的知識、技術和方法的能力。這包括對特定行業的專業知識、技術流程、工具設備的熟悉和精通。例如&#x…

scala基礎學習(數據類型)-字符串

文章目錄 scala中的字符串引號單引號雙引號三引號 常用內置函數length 獲取字符串長度charAt 字符串元素訪問substring 獲取字串indexOf 獲取字串位置replace 字符串替換toLowerCase,toUpperCase 字符串大小寫轉換trim 去除首位空白符split 字符串切割以及查看startsWith,endsW…

數據庫安全-redisCouchdb

1.redis未授權訪問 默認端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介紹:Redis 是一套開源的使用 ANSI C編寫、支持網絡、可基于內存亦可持久化的日志型、鍵值存儲數據庫,并提供多種語言的API。Redis 如果在沒有開啟認證的情況下,…

springboot集成websokcet+uniapp開發聊天原型驗證(一)

1. 整體思路 群組聊天功能實現思路 需要為每個群組維護一個對應的集合(可以是 Set 等數據結構),用來存放該群組內所有在線用戶的 WebSocketSession。當有消息發送到群組時,遍歷該群組對應的集合,向其中的每個在線用戶…

Reed-Muller(RM)碼之編碼

點個關注吧! 看了一些中文的博客,RM碼沒有很詳細的資料,所以本文嘗試給出推導原理。 推導 RM碼由 ( r , m ) ( r , m ) (r,m

List直接使用removeAll報錯

List直接使用removeAll報錯 需要先將list轉換才能使用 原因是: removeAll 方法在 Java 中用于從當前列表中刪除另一個列表中存在的所有元素。如果直接對 List 接口的一個實現使用 removeAll 方法拋出異常,可能的原因有: 不同的List實現&am…

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)已經成為了人工智能領域的一顆璀璨明星,從自然語言處理到智能問答系統&#…

深度解析 Pytest 中的 conftest.py

關注開源優測不迷路 大數據測試過程、策略及挑戰 測試框架原理,構建成功的基石 在自動化測試工作之前,你應該知道的10條建議 在自動化測試中,重要的不是工具 在使用 Pytest 進行測試的過程中,conftest.py 文件扮演著極為重要的角色…

【python】銀行客戶流失預測預處理部分,獨熱編碼·標簽編碼·數據離散化處理·數據篩選·數據分割

數據預處理 通過網盤分享的文件:銀行流失預測數據和代碼 鏈接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取碼: pfcs 非數值特征處理 目的:將非數值特征轉換為數值型,以便模型能夠處理。方法: 地理位置&am…

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 回歸預測 | MATLAB實現CNN-LSSVM…

slam學習筆記7---狀態量求導相關數學公式

前言:本來打算只是歸納一下數學求導相關公式,后面也寫了旋轉求導相關內容,哈哈。感覺有點發散把握不住呀。水平有限,歡迎評論區點出。 一、基本初等函數求導公式 ( C ) ′ 0 , C (C)0,C (C)′0,C為常數 ( x μ ) ′ μ x μ ?…

32單片機串口數據接收、空閑IDLE中斷詳解

一、前提說明 一開始寫單片機程序的時候不太清楚空閑中斷這個東西,每次用串口接收數據,都要再開一個定時器,在定時器內進行倒計時,每次接收數據就重置計時時間,計時結束就觸發中斷,再判斷所有接收的數據&am…

深入探討 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…