Elvis, crt.pem точно лежит в папке с app.py? И да, вы уверены, что правильно запускаете скрипт в ExecStart? Что-то мне подсказывает, что должно быть все-таки так: /home/me/venvs/bot/bin/python3, или у вас python3 по умолчанию в системе?
Just1n, только не забывайте, что вы переменной page_py присваиваете полное сообщение пользователя, включая слово "Вики", если вам его нужно удалить для сформирования запроса в wiki_wiki.page(), то вам нужно удалить его. Для этого можно разбить строку на слова функцией .split(), после чего нужное слово удалить функцией .replace(), все это можно сделать еще на стадии for и if, что-бы код не разростался.
Just1n, я же не знаю как именно вы использовали то, что я вам скинул. У меня бот ровно на той-же библиотеке работает и есть такая-же функция, которая у меня работает.
Дмитрий Шицков, я просто не знаю, как реализовать этот таймаут, если кол-во проходов цикла я просчитать никак не могу, а извне вмешаться в работу потока тоже нельзя. Более того у меня нет ни малейшего понимания как потоки "помечать", что бы знать какой закрывать, а какой нет.
В общем ладно, буду что-то думать. В любом случае это не критично, так как бот в раз сутки перезагружается и в целом работает без недостатка ресурсов.
Дмитрий Шицков, по первому и 3 пункту: я только недавно начал изучать python, начал писать многопользовательского бота, но в асинхронности разобраться никак не смог, по-этому придумал для каждого пользователя создавать поток, куда во время обращения передается его ID и дальше поток работает только с конкретным пользователем. Так что вопрос с асинхронностью мне еще, очевидно, рано изучать. Другие пробелы нужно заполнить.
Ну а по второму пункту - тоже думал о чем-то подобном, только не придумал как "убивать" какой-то конкретный поток, насколько я знаю в стандартной библиотеки такой возможности нет.
Спасибо, но на данный момент решил проблему убийством приложения os.kill(os.getpid(), signal.SIGINT).
А какое-то преимущество делать потоки демонами вообще есть, или только ради того, что-бы из любого потока можно было всех "убивать"?
Дмитрий Шицков, не сработает. Есть функции где программа ждет ответа от пользователя, в это время цикл "висит" на одном месте. В то-же время за день создается куча таких вот потоков, которые просто мертво висят.
pcdesign, таки добил. Обернул функцию прослушивания event блоком try, взял все возможные except (на всякий случай) requests, а прерывание программы выполнил командой os.kill(os.getpid(), signal.SIGINT). Другого решения не нашел, да и не факт, что буду искать.
Хотел вот еще что спросить - есть какая-то возможность задавать время жизни потока, по истечению которой он будет закрываться? А то некоторые пользователи клацают на функции, но не работают с ними, в итоге плодится много потоков, которые бесконечно висят и жрут ресурсы.