#python-3.x #django
Вопрос:
Я использую django с ATOMIC_REQUESTS=True
. Это работает нормально, но в некоторых случаях это вызывает у меня проблемы.
Например, у меня есть поток:
- Вызовите API, создайте базу данных идентификаторов объектов и верните ее идентификатор.
- Вызовите другой API, используя идентификатор из предыдущего шага, и создайте другой объект в БД.
Иногда шаг 2 завершается неудачно, потому что транзакция с шага 1 еще не совершена, и я получил сообщение об ошибке, что объект не существует.
Я не могу вручную вызвать transaction.commit()
return Response()
оператор before, так как я полагаюсь на ATOMIC_REQUESTS из окна.
Я могу добавить try, except
к шагу 2, но код будет выглядеть некрасиво, потому что для этого потребуется вызвать sleep() на пару секунд, чем повторять попытку. Также мне нужно будет определить, сколько попыток у меня должно быть, что может привести к длительному времени отклика или даже к ошибке тайм-аута.
Кроме того, я могу отключить ATOMIC_REQUESTS и использовать атомарные транзакции вручную, но это не предпочтительное решение, так как мне нужно будет провести много рефакторинга.
Кто-нибудь сталкивался с таким поведением?
Комментарии:
1. наиболее рекомендуемым решением является использование transaction.atomic(). Даже несмотря на то, что это большая работа.