![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
while not done():
task = pop(queue)
try:
do(task)
except Exception as e:
log("Cannot do %s: %s", task, e)
# possibly sleep(5)
# possibly push(queue, task)
Что не так на этой картинке?
Если ошибка в обработке задачи вызвана внешними условиями — интернет отвалился, сервер упал, место на диске где-то кончилось — то с большой вероятностью она будет повторяться, пока не починится.
Логи с одной и той же повторяющейся ошибкой с разными задачами читать крайне неинтересно.
Правильно — запоминать тип результата и логировать его изменение. В том числе — с ошибки на успех: «Ух ты, сервер поднялся, работаем дальше». Или так: «Помнишь того чувака с китайским IP’шником, который всё никак не мог к нам залогиниться по ssh? Так вот он таки зашёл!» 😨
Design issue — продумать эквивалентность на множестве ошибок. Чтоб, с одной стороны, не спамить, а с другой — не терять полезную информацию.