Как совместить long polling и schedule?
Есть телеграм бот, реализованный через pytelegrambotapi. Сделал таймер, который должен выполнять раз в n-секунд, но оно не отрабатывает почему-то.
def low_level_balance_timer():
print('ax')
users = getAllUsers()
for user in users:
pass
#check balance
# if balance low
# notify
time.sleep(60)
schedule.every(10).seconds.do(low_level_balance_timer)
def main_loop():
bot.polling(True)
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == '__main__':
main_loop()
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У вас schedule.run_pending() и bot.polling(True) работают в одном потоке и когда вы вызываете time.sleep(...), то текущий поток засыпает.
Поэтому, нужно разграничить их работу, создав второй поток, например так:
from threading import Thread
def low_level_balance_timer():
print('ax')
users = getAllUsers()
for user in users:
pass
#check balance
# if balance low
# notify
time.sleep(60)
def do_schedule():
schedule.every(10).seconds.do(low_level_balance_timer)
while True:
schedule.run_pending()
time.sleep(1)
def main_loop():
thread = Thread(target=do_schedule)
thread.start()
bot.polling(True)
if __name__ == '__main__':
main_loop()