[問題] threading Lock無作用

看板Python作者 (nahgnimiast)時間2年前 (2022/05/28 08:47), 2年前編輯推噓1(102)
留言3則, 2人參與, 2年前最新討論串1/1
我在使用一套測試軟體,只需提供被呼叫的函式 沒有測試軟的程式碼,只有被呼叫的函式 環境是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

05/28 10:49, 2年前 , 1F
貼上來的部分感覺沒什麼問題,可能其他地方有寫錯吧
05/28 10:49, 1F
謝謝。我再查查程式碼。 不過之前找了半天也沒找到問題, 大約我是查不出來了 ※ 編輯: tsaiminghan (220.136.121.134 臺灣), 05/28/2022 13:53:45

05/28 14:16, 2年前 , 2F
lock只是確保單一thread存取,不保證順序啊
05/28 14:16, 2F

05/28 14:29, 2年前 , 3F
改用外部的 lock? redis 之類的
05/28 14:29, 3F
文章代碼(AID): #1YaN4KUW (Python)