но слегка намучился с настройкой Task Scheduler. Цель - перезапуск бота раз в час. Крутил разные настройки, но либо перезапуск не отрабатывал, либо запускалось несколько тасков параллельно, что приводило к ошибке про только один инстанс бота. Где можно посмотреть\почитать про настройку? Или же буду благодарен за консультацию
Давайте попробуем решить изначальную проблему. Зачем перезапускать бота раз в час?
Давайте Раз в час - это просто примерная идея перезапускать раз в N времени. Через несколько дней бот начинает откушивать оперативу, что плачевно сказывается на и так не очень мощном сервере
Тогда проблема в том, что процесс бот кушает оперативу и не очищает ее. Подразумеваю, там либо кэш, либо треды, да?
Скорее, кэш. Не сильно большой поток запросов к боту, но он залезает в БД
Ваш код не знаю, но я бы на вашем месте пересмотрел кеш в вашем боте, если он так много занимает
В крайнем случае можно добавить свопа
Могу в личку прислать сниппет?
Если честно, то не надо :) лучше сюда: больше людей помогут
@bot_init.message_handler(func=lambda m: True) def request_from_user(m): if m.text in COMMAND_LIST: # Записываем лог. activities_logging(m.from_user.id,m.text) # Получаем параметры запроса к БД. command = get_command_query(m.text) # Оповещаем пользователя. bot_init.send_message(m.chat.id, f'Выгрузка по команде *{m.text}* запущена, это может занять до 2-3 минут.', parse_mode="Markdown", reply_markup=KEYBOARD) # Пишем в консоль, что был запрос print(*(m.chat.id,m.text,datetime.datetime.now())) # Получаем инфо из БД. filename = None # Сохраняем файл, если это была детализация, после чего отправляем. if 'Детализация' in m.text: details = get_db_info(command['server'], command['db'], command['query']) filename = filename_gen(m.text) save_file(details,filename) bot_init.send_document(m.chat.id, data=open(f'{path_to_save}\{filename}', 'rb'), reply_markup=KEYBOARD) else: # Если нет - отправляем сообщения из списка. messages = get_messages_list(command) if messages and len('\n\n'.join(messages))>9: answer = '\n\n'.join(messages) bot_init.send_message(m.chat.id, answer, parse_mode= "Markdown",reply_markup=KEYBOARD) else: creator_call(bot_init,m.chat.id) # Ждём следующей команды. bot_init.register_next_step_handler(m, request_from_user) elif m.text == '/start': bot_init.send_message(m.chat.id, 'Бот успешно активирован',parse_mode="Markdown",reply_markup=KEYBOARD) bot_init.infinity_polling(none_stop=True,timeout=10, interval = 5)
Могу отдельно методы покидать, конечно
Я в питоне не силен, нл что то мне память подсказывает, что файл нужно закрыть после дейтсвий с ним "data = open()"
Этот кусок дописал, спасибо Есть ещё идеи, куда посмотреть?
поллинг в телеботе периодически отваливается. Если нужно остаться на телеботе, то перехожите на вебхуки
Там infinity polling, отваливается, но возобновляет захват новых сообщений
Обсуждают сегодня