Telegram Bot с потоком отправляет несколько дубликатов сообщения
У меня свой TG бот с аукционами. Когда выкладывается аукцион, то у него есть время окончания, по этому времени окончания победителю должно отправляться сообщение, но если таких аукционов много, то, видимо, потоки пересекаются и отправляется несколько сообщений, что он победил. Как быть? Помогите, пожалуйста.
auction_on - словарик для хранения данных об аукционе, тут важна сама логика, как сделать так, чтобы потоки не пересекались?
def auction_stop_processing(name, end_time):
print(end_time)
end_time = end_time.split()[1]
schedule.every().day.at(end_time).do(auction_stop, name)
schedule_thread = threading.Thread(target=run_auction_stop)
schedule_thread.start()
def auction_stop(auction_name):
print('check')
max_bidder_id = None
max_bid = 0
bids = auction_on.get(auction_name, {})
for bidder_id, bid in bids.items():
bid_value = float(bid)
if bid_value > max_bid:
max_bid = bid_value
max_bidder_id = bidder_id
if max_bidder_id:
print('correct try to stop a lot')
send_winning_message(max_bidder_id, auction_name, max_bid)
def send_winning_message(user_id, auction_name, winning_bid):
message = f"Поздравляем! Вы победили на аукционе '{auction_name}' с предложением {winning_bid} BYN."
bot.send_message(user_id, 'U a winning')
def run_auction_stop():
while True:
schedule.run_pending()
time.sleep(1)
Ответы (1 шт):
Автор решения: Bi Diaz
→ Ссылка
Создай булевую переменную. Перед отправкой сообщения о победе сделай проверку, если переменная равнa False - отправляем сообщение и меняем значение на True. Если True - не отправляем.