Всего два цента, если вам нужно смешать этот подход с одновременными задачами сельдерея:

@shared_task(bind=True,autoretry_for=(Exception,), retry_kwargs={'max_retries': 5, 'countdown': 2})
-def Deposit(self, amount):
— с транзакцией .atomic():
— — self.balance += сумма
— — self.save()

Таким образом, сельдерей обработает исключение в тот момент, когда задача обнаружит, что база данных заблокирована, и после этого повторит попытку. Конечно, есть и другие варианты подхода с повторением, но я думаю, что вы легко поймете идею или взглянете на документы.

Источник: https://www.distributedpython.com/2018/09/04/error-handling-retry/