所以我有一个可以监听消息的websocket,当它收到所需的消息时,它会调用run()函数。因为run()运行完成需要一段时间,并且在此期间可能有多条消息,我想锁定此函数,以便在任何时候它只运行一次。如果在此期间收到消息,我只想忽略它。但是我没有让锁机制正常工作。
def __init__(self):
self.lock = threading.Lock()
def process_message(self, msg):
some_obj.run(self.lock)
其他一些课程:
def run(self,lock):
acquired = lock.acquire(False)
try:
if acquired:
print("not locked")
else:
print("locked")
finally:
if acquired:
lock.release()
print("released")
我希望获得一系列锁定/未锁定/释放但我只是被锁定并释放。我做错了什么?
答案 0 :(得分:0)
我已经做了一个非常基本的实现,旨在重现你的问题:
from threading import Lock
lock=Lock()
contador = 0
while contador < 5:
if contador == 4:
a = lock.acquire(False)
acquired = lock.acquire(False)
try:
if acquired:
print("not locked", contador)
else:
print("locked")
finally:
contador += 1
if acquired:
lock.release()
print("released")
以下结果:
$ python tester02.py
not locked 0
released
not locked 1
released
not locked 2
released
not locked 3
released
locked
运行功能似乎正确。据我所知,我认为 lock 不应该是实例属性。