Проверка и резервирование ключа не атомарны: оба запроса могут увидеть отсутствие записи до завершения другого. Потокобезопасность отдельной операции словаря не защищает весь сценарий.
Почему словарь не обеспечивает идемпотентность запроса
Проверка и резервирование ключа не атомарны: оба запроса могут увидеть отсутствие записи до завершения другого. Потокобезопасность отдельной операции словаря не защищает весь сценарий.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Два конкурентных запроса проверяют if key not in results, выполняют действие и записывают ответ. Ключ одинаковый. Почему операция может выполниться дважды?
Ответ
Проверка и резервирование ключа не атомарны: оба запроса могут увидеть отсутствие записи до завершения другого. Потокобезопасность отдельной операции словаря не защищает весь сценарий.
Нужно атомарно создать запись processing с уникальным ключом и согласованной областью пользователя. Сохраняйте отпечаток payload: тот же ключ с другим телом должен давать конфликт. Конкурентный повтор ожидает итог или получает статус. Для нескольких процессов локального словаря недостаточно; используйте общее устойчивое хранилище и определите восстановление после сбоя.