了解MicroPython多執行緒

2021-10-04 02:57:13 字數 1611 閱讀 5819

該模組提供了用於處理多個執行緒(也稱為輕量級程序或任務)的低階原語 - 多個控制線程共享其全域性資料空間。為 了同步,提供了簡單的鎖(也稱為互斥鎖或二進位制訊號量)。

發生執行緒特定錯誤時,會runtimeerror引發異常。

快速使用示例:

import _thread

import time

def th_func(delay, id):

while true:

time.sleep(delay)

print(『running thread %d』 % id)

for i in range(2):

_thread.start_new_thread(th_func, (i + 1, i))

啟動乙個新執行緒並返回其識別符號。執行緒使用引數列表args(必須是元組)執行函式。可選kwargs引數指定關鍵字引數的字典。 當函式返回時,執行緒將以靜默方式退出。當函式以未處理的異常終止時,將列印堆疊跟蹤,然後執行緒退出(但其他執行緒繼續執行)。

引發 systemexit 異常。如果未捕獲時,這將導致執行緒以靜默方式退出。

返回乙個新的鎖定物件。鎖的方法如下所述。鎖最初為解鎖狀態。

返回thread identifier當前執行緒。這是乙個非零整數。它的價值沒有直接意義; 它旨在用作例如索引執行緒特定資料的字典的魔術cookie。當執行緒退出並建立另乙個執行緒時,可以**執行緒識別符號。

返回建立新執行緒時使用的執行緒堆疊大小(以位元組為單位)。可選的size引數指定用於後續建立的執行緒的堆疊大小,並且必須是0(使用平台或配置的預設值)或至少為4096(4kib)的正整數值。 4kib是目前支援的最小堆疊大小值,以保證直譯器本身有足夠的堆疊空間。

這是鎖定物件的型別。

python提供的執行緒模組包含乙個易於實現的鎖定機制,可以實現執行緒之間的同步。通過呼叫lock()方法建立乙個新鎖。 新鎖物件的獲取(阻塞)方法用於強制執行緒同步執行。可選的阻塞引數使您可以控制線程是否等待獲取鎖定。

鎖定物件具有以下方法:

在沒有任何可選引數的情況下,此方法無條件地獲取鎖定,如果有必要,等待它被另乙個執行緒釋放(一次只有乙個執行緒可以獲取鎖定 - 這就是它們存在的原因)。

如果存在整數waitflag引數,則操作取決於其值:如果它為零,則僅在不等待的情況下立即獲取鎖定時獲取鎖定,而如果它非零,則如上所述無條件地獲取鎖定。

如果浮點超時引數存在且為正,則它指定返回之前的最長等待時間(以秒為單位)。負超時引數指定無限制等待。如果waitflag為零,則無法指定超時。

true如果成功獲取鎖定則返回值,否則返回值false

釋放鎖定。必須先獲取鎖,但不一定是同乙個執行緒。

返回鎖的狀態:true表示被某個執行緒獲取,false則表示沒有。

除了這些方法之外,還可以通過with語句使用鎖定物件,例如:

import _thread

a_lock = _thread.allocate_lock()

with a_lock:

print(「a_lock is locked while this executes」)

摘抄自:

ThreadPoolExecutor 多執行緒

from concurrent.futures import threadpoolexecutor,wait,all completed from queue import queue myqueue queue 佇列,用於儲存函式執行結果。多執行緒的問題之一 如何儲存函式執行的結果。def thr...

c 多線例項

using system using system.threading using system.text namespace controlthread 第二個執行緒正在執行,請輸入 s uspend,r esume,i nterrupt,or e xit.datetime.now.tostrin...

CLLocationManager在多執行緒下使用

似乎定位的返回 呼叫 只能有主線程來呼叫,並且這個物件還必須是在主線程建立的。做過以下實驗 1.子執行緒中 self.locationmanager cllocationmanager alloc init autorelease locationmanager.delegate self loca...