Python从事件侦听器锁定

时间:2017-07-18 08:33:35

标签: python locking

所以我有一个可以监听消息的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")

我希望获得一系列锁定/未锁定/释放但我只是被锁定并释放。我做错了什么?

1 个答案:

答案 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 不应该是实例属性。