Здравствуйте, netch80, Вы писали:
N>Какие есть варианты сделать это красиво без подобных ручных плясок?
кмк если такое действительно уже стало паттерном, то оптимальней будет один раз написать хелпер а-ля InvertedLock c _enter_/_exit_ протоколом, для поддержки with и будет то же самое только raii-like
with self.lock: ## для C++ аналог -- захват лока в конструкторе
while True:
if not self.task: ## можно было и с предикатом, если кому удобнее читать
self.cv.sleep()
continue
task = self.task
self.task = None
with InvertedLock(self.lock):
try:
self.execute(task)
except Exception:
... пожаловались ...