[問題] threading Lock無作用

作者: tsaiminghan (tsaiminghan)   2022-05-28 08:47:12
我在使用一套測試軟體,只需提供被呼叫的函式
沒有測試軟的程式碼,只有被呼叫的函式
環境是ubuntu20.04, python是3.8.10
流程大約如下,可以一次進行多台設備測試
init -> ge_set -> test -> teardown -> clean
其中我在init和get_sn中使用同樣的程式,但是
似乎在init中Lock無效,但是get_sn中有效,不
知道是否有人能提供意見?
程式大約如下
========================================
class G: pass
G.duts = None
Lock = threading.Lock()
def init(logger):
with Lock:
logger.info(str(G.duts))
if G.duts is None:
G.duts = 1
logger.info(str(G.duts))
def get_sn(test_data):
"""
with Lock:
test_data.logger.info(str(G.duts))
if G.duts is None:
G.duts = 1
test_data.logger.info(str(G.duts))
"""
def clean(logger):
G.duts = None
========================================
一次進行兩台設備的測試時,
在init印出來的輸出分別是
None 1 和 None 1
如果改在get_sn印出來的是
None 1 和 1 1
在init中,我有試過os.getpid(),
回傳的數字相同 應該不是不同process
還是我的Lock使用方法有誤?
我試過以下,結果也一樣。
Lock.acquire()
Lock.release()
作者: lycantrope (阿寬)   2022-05-28 10:49:00
貼上來的部分感覺沒什麼問題,可能其他地方有寫錯吧
作者: Woqeker (窩顆ker)   2022-05-28 14:29:00
改用外部的 lock? redis 之類的
作者: aalexx (aalexx.S)   2022-06-07 03:15:00
那兩個function都是class static???

Links booklink

Contact Us: admin [ a t ] ucptt.com