瞭解MicroPython多線程

_thread --- 線程

該模塊提供了用於處理多個線程(也稱爲輕量級進程或任務)的低級原語 - 多個控制線程共享其全局數據空間。爲 了同步,提供了簡單的鎖(也稱爲互斥鎖或二進制信號量)。

發生線程特定錯誤時,會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))

方法

_thread.start_new_thread(function,args [,kwargs])

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

_thread.exit()

引發 SystemExit 異常。如果未捕獲時,這將導致線程以靜默方式退出。

_thread.allocate_lock()

返回一個新的鎖定對象。鎖的方法如下所述。鎖最初爲解鎖狀態。

_thread.get_ident()

返回thread identifier當前線程。這是一個非零整數。它的價值沒有直接意義; 它旨在用作例如索引線程特定數據的字典的魔術cookie。當線程退出並創建另一個線程時,可以回收線程標識符。

_thread.stack_size([size])

返回創建新線程時使用的線程堆棧大小(以字節爲單位)。可選的size參數指定用於後續創建的線程的堆棧大小,並且必須是0(使用平臺或配置的默認值)或至少爲4096(4KiB)的正整數值。 4KiB是目前支持的最小堆棧大小值,以保證解釋器本身有足夠的堆棧空間。

對象

_thread.LockType

這是鎖定對象的類型。

Lock 類

class Lock

Python提供的線程模塊包含一個易於實現的鎖定機制,可以實現線程之間的同步。通過調用Lock()方法創建一個新鎖。 新鎖對象的獲取(阻塞)方法用於強制線程同步運行。可選的阻塞參數使您可以控制線程是否等待獲取鎖定。

方法

鎖定對象具有以下方法:

lock.acquire(waitflag = 1,timeout = -1)

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

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

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

True 如果成功獲取鎖定則返回值,否則返回值 False 。

lock.release()

釋放鎖定。必須先獲取鎖,但不一定是同一個線程。

lock.locked()

返回鎖的狀態:True表示被某個線程獲取,False則表示沒有。

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

import _thread
a_lock = _thread.allocate_lock()
with a_lock:
    print(“a_lock is locked while this executes”)

 摘抄自:https://mpython.readthedocs.io/zh/master/library/micropython/_thread.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章