вы задали очень хороший вопрос, и новичок может запутаться в Python. Позвольте мне разделить ответ на несколько.
Сначала давайте посмотрим на часть телебота:
https://github.com/eternnoir/pyTelegramBotAPI/blob/master/telebot/ init .py # L387-L403
Это метод telebot.polling (). Do c заявляет, что этот метод нельзя вызывать более одного раза. Так что не стоит помещать это в цикл while, так как он будет вызываться более одного раза. Из рассмотрения реализации он создает отдельный поток, который может затем обслуживать запросы бота.
...
bot.polling() # this creates another Thread.
while True: # this loop is never exited
try:
schedule.run_pending()
except Exception:
time.sleep(15)
теперь модуль расписания:
Не стоит просто подавить исключения в try.exception, так как тогда вы не знаете, что было сломано. Поэтому, по крайней мере, напечатайте исключение (хотя вы должны использовать ведение журнала)
bot.polling() # this creates another Thread.
while True: # this loop is never exited
try:
schedule.run_pending()
except Exception as ex:
print(ex)
time.sleep(15)
Теперь у вас должно быть больше подсказок о том, что происходит. Основной поток должен иметь дело с расписанием, а поток бота, созданный методом .polling (), должен иметь дело с вызовами телеграммы.
Дополнительные материалы для чтения / просмотра этой топи c:
Я предлагаю прочитать больше о многопоточности для выполнения нескольких вызовов блокировки (читай: while True
loop) параллельно друг другу. Например, здесь: https://realpython.com/intro-to-python-threading/
Хотя Python имеет свои недостатки в многопоточности из-за GIL. https://realpython.com/python-gil/
Обе эти темы являются немного более сложными для человека, "очень нового для программирования". Но я предлагаю прочитать их, если вы хотите понять, что происходит в вашей программе BOT vs SCHEDULE.
Или посмотрите видео. Лично мне нравится говорить о GIL от PyCon: https://kolodziejj.info/talks/gil/ https://www.youtube.com/watch?v=ZvWmAIODi-s&list=PLyde45Tox-NfsQYj0AuToQNQehYIItZg6&index=22&t=0s