Здравствуйте! Прошу объяснить мне, как новичку, почему я не могу
прекратить выполнение потока и наоборот,
запустить поток в питоне приведенным ниже способом? Задача состоит в том, чтобы выполнять некоторые фоновые действия в то время, пока работает основной функционал бота.
Из кода убрал все лишнее, оставил только проблемные части в виде тестовых функций.
import telebot
import time
import datetime
import threading
global stop_thread
stop_thread = False
#---- объявление других переменных, действия и функции
@bot.message_handler(content_types = ['text'])
def get_user_text(message):
if message.text == '/stop_thread':
if 'stop_thread' in globals():
stop_thread = True
print('Получен запрос на остановку потока')
print('stop_thread =', stop_thread)
# в консоли выводится, что значение стало True, но до потока оно почему-то не доходит,
# внутри функции start_thread() остается False
if message.text == '/start_thread':
if 'stop_thread' in globals():
stop_thread = False
t = threading.Thread(target = start_thread)
t.start() # запустить поток таким образом тоже не получается
#---- другие действия и функции
def start_thread():
print(f'Начало отсчета: {datetime.datetime.utcnow()}')
print('stop_thread =', stop_thread)
while not stop_thread:
print('Работает поток... stop_thread =', stop_thread)
print(f'Прошло 3 секунды, {datetime.datetime.utcnow()}')
time.sleep(3)
t = threading.Thread(target = start_thread)
t.start()
#---- еще действия и функции
# стартуем бота
bot.polling(non_stop = True)
При запуске по F5 все идет нормально, бот функционирует, параллельно запускается поток, который выводит тестовую распечатку в консоль. Однако изменить значение переменной
stop_thread
на
True
и остановить поток я не могу,
stop_thread
остается
False
. Как бы я ни игрался с
global stop_thread
, ничего не меняется. Даже завершение программы по Ctrl-C не прекращает работу потока - продолжается тестовая печать в консоль.
Большая просьба объяснить, что нужно сделать, желательно с примерами.
Спасибо!