|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
||||||
Telegram API Отключение отдельного потока с bot.polling()27.03.2023, 04:03. Показов 4017. Ответов 24
Метки нет (Все метки)
Здравствуйте! Подскажите, пожалуйста: Я запустил bot.polling() через отдельный поток с помощью threading
0
|
||||||
| 27.03.2023, 04:03 | |
|
Ответы с готовыми решениями:
24
Никак не получается запустить bot.polling Падает чат-бот. Проблема с bot.polling() While True и Bot.Polling должны работать вместе |
|
Автоматизируй это!
|
|
| 27.03.2023, 08:03 | |
|
Fershtein, остановить поток в питоне нельзя. Выкручиваются именно с флагами и ивентами. Или если тот, второй поток-демон, то питон его убьет при остановке текущей программы
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|
| 27.03.2023, 08:07 [ТС] | |
|
Welemir1, В тот-то и беда. При просмотре различных видео-роликов и статей там предлагают добавить флаг или ивент в функцию (которая прописана через def). Но, как я понял, bot.polling сам по себе является функцией. И как туда добавить флаг или ивент - без понятия
0
|
|
|
Автоматизируй это!
|
|
| 27.03.2023, 09:23 | |
|
я не знаю задачу и потому не могу ничего посоветовать. Если надо просто завершить бота при закрытии программы, то сделай его поток демоном и все. Если же нужно по кнопке стартануть бота и по кнопку убить то это сложнее.
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|
| 27.03.2023, 09:38 [ТС] | |
|
Welemir1, Да, мне нужен второй вариант. То есть бот просто "умирает" по кнопке, а по другой кнопке "оживает". Но сейчас меня интересует именно "приостановка бота"
Добавлено через 4 минуты Welemir1, В принципе, если есть вариант создать аналог функции bot.polling через def, то тогда можно будет использовать флаг или ивент. Вот можно ли как-то узнать, из чего состоит эта функция bot.polling?
0
|
|
|
Автоматизируй это!
|
||
| 27.03.2023, 09:49 | ||
|
Но на самом деле это не так можно решить а с коленцем: 1) в основном потоке создаем поток демон1 2) в потоке демоне1 также запускаем поток-демон2, в котором и стартуем бот.поллинг 3) в потоке-демоне1 после того как запустился поток-демон2 делаем вечный цикл, где у нас слип на секунду и проверку какого то флага, типа canRun. Если флаг станет ЛОЖЬ то делаем break 4) когда в основном, главном потоке нам надо убить бота (жестоким образом) мы по нажатию кнопки или еще как - ставим флаг canRun=False как это работает - поток-демон2 работает с поллингом и ни о каких флагах не знает, это нормально. Но тот, кто его породил (демон1) постоянно со слипом в секунду отслеживает флаг и если флаг ложный то завершается. Встроенный механиз питона убьет поток-демон2 потому что его родитель умер. Профит
1
|
||
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|
| 27.03.2023, 10:07 [ТС] | |
|
Welemir1, То есть поток1 запускает поток2, который запускает бота. При этом поток1 делает проверку на флаг и умирает, если флаг изменился. Верно уловил суть?
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|
| 27.03.2023, 10:38 [ТС] | |
|
Welemir1, Да, бот отключается. За это спасибо. Но теперь возникла другая проблема: не выходя из программы я не могу запустить бота вновь.
Вот есть у меня два класса, которые реализованы в виде окон (pyqt5). У каждого из этих окон есть кнопка "перехода" в другое окно (закрывается текущее окно и создается второе). Во втором классе запускается телеграм-бот и функция bot.polling (Чтобы работал и бот, и окна, бот запущен в отдельном потоке) Вот с помощью Вашего метода я сделал так, чтобы при переходе в первое окно (в первый класс) функция bot.polling "прерывалась" (чтобы бот не реагировал на команды). Но при переходе опять во второй класс возникает ошибка, из-за которой бот не запускается (смысл ошибки в том, что у меня бот будто бы уже запущен) Добавлено через 1 минуту Конкретная ошибка: TeleBot: "Threaded polling exception: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running"
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|
| 27.03.2023, 12:00 [ТС] | |
|
Welemir1, Все-таки я думаю, что ошибка возникает именно за счет "убивания" потока. В том плане после завершения потока можем ли мы его снова создать?
0
|
|
|
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
|
|
| 27.03.2023, 12:57 | |
|
Как правило, вещи на подобии bot.polling() внутри сами запускают отдельный поток и всю свою логику отрабатывают в этом отдельном потоке. Возможно при закрытии внешнего потока, сам bot.polling() продолжает крутиться.
Если правильно угадал и используется библиотека telebot, то у него есть метод stop_polling(), его нужно вызывать при закрытии внешнего потока.
1
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|||
| 27.03.2023, 13:31 [ТС] | |||
|
kazak,
А насчет stop_polling() я посмотрю, только не совсем понял, куда его пихнуть: Вы имеете в виду засунуть его в бесконечный цикл, где осуществляется проверка флага? Добавлено через 52 секунды Добавлено через 1 минуту Как вариант думаю создать этот отдельный поток вне классов. Может это что-то даст
0
|
|||
|
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
|
||
| 27.03.2023, 14:19 | ||
|
Тогда все должно быть проще, достаточно вызвать stop_polling, если polling единственный метод работающий в потоке, то после остановки polling закроется и поток.
1
|
||
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
|||||||
| 27.03.2023, 14:53 [ТС] | |||||||
|
kazak,
Добавлено через 3 минуты
stop_thread у меня в классе присвоено False. После нажатия кнопки, выполняется функция, в которой значение stop_thread становится True и бот заканчивает свою работу и происходит переход в другой класс. А при возвращении в класс, где прописан участок кода выше, ошибки нет, но и сам бот попросту не запускается
0
|
|||||||
|
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
|
|
| 27.03.2023, 14:53 | |
|
stop_bot вместо stop_polling попробуйте.
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
||
| 27.03.2023, 17:27 [ТС] | ||
|
kazak,
Добавлено через 2 часа 21 минуту kazak, А есть ли возможность создать просто класс QThread? (Просто у этого класса, насколько я понял, есть метод run и stop. Может так выгорит?
0
|
||
|
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
|
|
| 27.03.2023, 17:54 | |
|
Попробуйте вернуть stop_polling и при создании бота передавать параметр threaded=False.
У меня аналогично, при создании бота по умолчанию, повторный polling запускается, получает сообщения, но обрабатывать их почему-то не хочет. С threaded=False все ок.
0
|
|
|
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
|
||
| 27.03.2023, 18:23 [ТС] | ||
|
kazak,
Добавлено через 8 минут Если этот параметр ставится в функцию с демоническими потоками, то, пожалуйста, укажите мне строку, куда это надо пихнуть
0
|
||
|
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
|
||||||
| 27.03.2023, 18:31 | ||||||
1
|
||||||
| 27.03.2023, 18:31 | |
|
Помогаю со студенческими работами здесь
20
подскажите что такое long-polling и polling (COMET) Изменение ImageView из отдельного потока Скриншот формы из отдельного потока
Signal Slot из отдельного потока в основной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|