Как создать блокировку для ключа redis

У меня есть django webapp для обработки событий футбольных команд (матч, тренировка...), которые называются "командные сессии". Каждая командная сессия состоит из "сессий спортсменов", данные которых (максимальная скорость, дистанция бега и т.д.) рассчитываются, когда я создаю командную сессию, и это занимает много времени. Это работает очень хорошо. Следующее, что я реализую, это то, что после создания командной сессии я экспортирую ее в базу данных postgresql. Для этого я создаю ключ redis, "связанный" с командой gpm, которая делает запросы. Проблема заключается в следующем: поскольку сессия спортсмена занимает много времени, некоторые сессии спортсменов не успевают завершиться, чтобы быть обработанными, когда команда gpm начинает свое выполнение.

Итак, я хочу создать ключ redis, который остается "заблокированным" в течение определенного периода времени (например, 10 минут), чтобы завершить создание сессии команды и всех ее сессий спортсменов.

Этот метод создает ключ redis, который я хочу заблокировать (я пишу его в классе TeamSession). Он принимает два аргумента: первый - запись модели django, которая содержит всю информацию о БД postgre, используемую командой gpm; и teamsession_id.

    def queue_gds_for_gpm(self, gds_record, teamsession_id):
        queue = settings.GPM_GDS_WAITING_QUEUE
        gds_record_id = gds_record.id

        key = "{}:{}:{}".format(
            redis_key,
            gds_record_id,
            teamsession_id
        )

        # gds_key_locked = Redlock(key=key, auto_release_time=600 * 1000)
        # gds_key_locked.acquire()  # is_locked = true

        self.rClient.sadd(queue, key)  # aggiungo chiave alla coda

        return key

Для блокировки ключа я пытался использовать Redlock, но он не очень хорошо работает для моей цели.

Можно ли заблокировать ключ и, соответственно, выполнение команды gpm на 10, 15 минут для создания командной сессии?

Заранее спасибо и извините за невежество!

Вернуться на верх