Написал бота на
python3.6, в задачах которого стоит отвечать на команды и параллельно проверять есть ли в задачах упоминание оповестить того или иного пользователя. Запускается бот на хостинге
(Ubuntu 16.04 LTS) командой
python3.6 /root/1.3/bot.py >/dev/null 2>/root/1.3/logs/errors.txt &
и в процессах наблюдаю 5 активных
bot.py
Использую
getUpdates, автоматические оповещения проверяю так:
threading.Thread(target=bot.polling).start()
while True:
autonotif()
time.sleep(60)
При запуске бот работает, но через часов 15-20, если написать ему, может не ответить, а в процессах остается только 4
bot.py. Причем оповещения продолжают работать, а сами обновления запросов бот больше не получает. Если завершить процессы и перезапустить бота, появляется ошибка кодировки типа:
Traceback (most recent call last):
...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 2: ordinal not in range(128)
Exception in thread Thread-1:
Traceback (most recent call last):
...
UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-41: ordinal not in range(128)
Ошибка пропадает только если перезапустить сервер и снова запустить, тогда можно вновь заметить 5 активных процессов бота и через время проблема повторяется. До того, как стал использовать многопоточность для оповещений, данной проблемы не наблюдалось. Но при этом именно она и продолжает работать в случае засыпания бота и остановки одного процесса. Была версия, что ошибка с кодировкой появляется именно из-за невозможности на стороне Telegram получить новый обновленный запрос с моей стороны. Но отчего происходит засыпание - неизвестно.