Как сделать так, чтобы мой API не мог обрабатывать один и тот же метод одновременно
У меня есть метод в моем API, который обрабатывает операции синхронизации с ERP компании. Этот метод вызывается раз в 30 минут скриптом, который я сделал для того, чтобы все всегда было актуально. Однако, если кто-то хочет, он может самостоятельно сделать запрос к конечной точке, но при этом ему нужно сообщить, обрабатывается ли операция в данный момент или нет
 Итак, мое решение: я держу флаг в базе данных и устанавливаю его в значение true, когда транзакция продолжается, и false, когда она заканчивается, поэтому мое приложение будет проверять его и продолжать/останавливать, основываясь на этом условии
 Есть только одна проблема: поскольку я храню все в одной транзакции, флаг фактически бесполезен, так как только внутри этой транзакции он будет установлен в значение true. Я думал обновлять флаг перед началом транзакции и возвращать его при возникновении ошибки, но я не могу гарантировать, что процесс возврата будет происходить в 100% случаев (поэтому есть возможность заблокировать операцию)
Мой код следующий, если кому-то он нужен для справки:
@api_view(['POST'])
def syncErpItems(request):
    try:
        with transaction.atomic():
            job = Jobs.objects.get(name='items')
            if job.updating:
                return Response({'message': 'Sync already ongoing'})
            job.updating = True
            job.save()
            updateItems()
            job.updating = False
            job.last_execution = timezone.now()
            job.save()
            return Response({'message': 'Success'})
    except Exception as e:
        return Response({'message': 'Error on sync: ' + str(e)})
Кое-что следует иметь в виду:
- Нет возможности позволить блокировке произойти и вручную исправить ее позже, учитывая другие обстоятельства .
- Операция синхронизации занимает около 30/40 секунд, при этом из ERP поступает много контента