Почему бы и нет:
def someMethod(self):
with self.my_lock:
self.somethingNoLock()
def somethingElse(self):
with self.my_lock:
self.somethingNoLock()
def somethingNoLock(self):
print 'i hate hello worlds"
Обратите внимание, что хотя someMethod
и somethingElse
идентичны в моем решении, в целом они будут разными. Вы можете поместить другую оболочку вокруг somethingNoLock
, чтобы захват и снятие блокировки не повторялись несколько раз.
Это гораздо проще и понятнее. Просто потому, что доступен возвратный стопорный молоток, я бы не рекомендовал использовать его, когда есть более простой и менее хрупкий способ его прибить.
Более конкретная критика rlock заключается в том, что строка, которая создает блокировку повторного входа, находится далеко от кода, который получает блокировку повторным входом. Это немного хрупко, если кто-то скажет, что объединяет повторно входящую блокировку с другой блокировкой, которая не является повторно входящей, или иным образом изменяет строку, которая создает блокировку.