作者tsaiminghan (nahgnimiast)
看板Python
標題[問題] threading Lock無作用
時間Sat May 28 08:47:12 2022
我在使用一套測試軟體,只需提供被呼叫的函式
沒有測試軟的程式碼,只有被呼叫的函式
環境是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()
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.121.134 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1653698836.A.7A0.html
→ lycantrope: 貼上來的部分感覺沒什麼問題,可能其他地方有寫錯吧 05/28 10:49
謝謝。我再查查程式碼。 不過之前找了半天也沒找到問題,
大約我是查不出來了
※ 編輯: tsaiminghan (220.136.121.134 臺灣), 05/28/2022 13:53:45
推 lycantrope: lock只是確保單一thread存取,不保證順序啊 05/28 14:16
→ Woqeker: 改用外部的 lock? redis 之類的 05/28 14:29
→ aalexx: 那兩個function都是class static??? 06/07 03:15
後來想一下,應該是我弄錯了,雖然GUI上,
兩個地方都有init的log,但是應該是只
呼叫了一次init,但是log兩邊都會顯示
※ 編輯: tsaiminghan (220.136.123.1 臺灣), 01/13/2023 20:00:09