我有多个锁来锁定我的API的不同部分。
要锁定任何方法,我会像这样做:
import threading
class DoSomething:
def __init__():
self.lock = threading.Lock()
def run(self):
with self.lock:
# do stuff requiring lock here
对于大多数使用情况,这样做是可以正常工作的。
但是,当需要多个锁时,我不确定我的操作是否有效:
import threading
class DoSomething:
def __init__():
self.lock_database = threading.Lock()
self.lock_logger = threading.Lock()
def run(self):
with self.lock_database and self.lock_logger:
# do stuff requiring lock here
目前这段代码可以运行,但我不确定它是否按照我的意愿运行。
我的问题是:锁是同时获得还是先获得第一个锁,然后才获取第二个锁。
我的以前的代码是否如下所示?
with self.lock1:
with self.lock2:
# do stuff here
目前代码可以正常工作,但由于我的线程同时需要同一把锁的概率极低,因此以后调试可能会带来很大的麻烦。
我提出这个问题是因为我非常不确定如何测试我的代码以确保它按预期工作,并且同样有兴趣得到答案并知道如何测试以确保它工作(而不是最终用户为我测试)。
with lockA and with lockB:
这样的语法,所以你需要逐个获取锁,然后可能会遇到死锁的问题。除非我对某个特性不了解或者误解了答案(可能性存在),它确实回答了问题。 - undefined