Мне нужно заблокировать пользователя, пока его функция не будет выполнена, а затем разблокировать его.
до сих пор, чтобы быть уверенным, чтобы избежать условий гонки, я использовал Redis.
я делал это:
def lock_user_was_locked(bot, update):
sender_id = update.message.from_user.id
chiave = "locked:"+str(sender_id)
stato = r.incr(chiave, amount=1)
if stato != 1:
update.message.reply_text(tools.langMessage(getBotLang(sender_id), "too_much_match_ops"), quote=True)
return True
r.expire(chiave, 10)
я видел последний фрагмент этого ответа https://stackoverflow.com/a/7927957/8372336
Я думаю, что я могу заменить свою функцию с этим запросом, используя postgres вместо redis. Кстати, я не хочу ждать, если пользователь заблокирован, поэтому я решил использовать опцию NOWAIT.
но я также хочу считать его заблокированным, только если обновляется столбец «is_locked», а не вся строка (я мог бы добавить и другие столбцы для других вещей). есть ли способ рассмотреть только этот столбец для обновления без ожидания?
В противном случае я должен создать другую таблицу, имеющую только этот столбец для достижения этого?