作者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://webptt.com/cn.aspx?n=bbs/Python/M.1653698836.A.7A0.html
1F:→ lycantrope: 贴上来的部分感觉没什麽问题,可能其他地方有写错吧 05/28 10:49
谢谢。我再查查程式码。 不过之前找了半天也没找到问题,
大约我是查不出来了
※ 编辑: tsaiminghan (220.136.121.134 台湾), 05/28/2022 13:53:45
2F:推 lycantrope: lock只是确保单一thread存取,不保证顺序啊 05/28 14:16
3F:→ Woqeker: 改用外部的 lock? redis 之类的 05/28 14:29
4F:→ aalexx: 那两个function都是class static??? 06/07 03:15
後来想一下,应该是我弄错了,虽然GUI上,
两个地方都有init的log,但是应该是只
呼叫了一次init,但是log两边都会显示
※ 编辑: tsaiminghan (220.136.123.1 台湾), 01/13/2023 20:00:09