• Как прекратить поток в Python?

    @EugeneVKruglov Автор вопроса
    Dr. Bacon, я не профессиональный программист, а любитель. Профессия моя чрезвычайно далека от IT. На Питоне пробую писать недавно, пока "заходит" с трудом. Лет 10 назад писал на Delphi, получалось.
    Да, я в курсе, что локальные и глобальные переменные отличаются областью видимости.
    Так тоже пробовал (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
    #------------
    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()}')
            #bot.send_message(5204768175, f'Прошло 3 секунды, {datetime.datetime.utcnow()}')
            time.sleep(3)
        MyThread.join()
    
    stop_thread = False
    MyThread = threading.Thread(target = start_thread) 
    MyThread.start()
    # стартуем бота
    bot.polling(none_stop = True)
    Складывается ощущение, что бот работает в своем потоке и не может передать значение переменной потоку, который я создаю. Поэтому и обращаюсь к тем, кто умеет.
  • Как прекратить поток в Python?

    @EugeneVKruglov Автор вопроса
    Dr. Bacon, да я уже все испробовал, в т.ч. и объявление stop_thread внутри функции start_thread(). Последний вариант:

    def set_globals():
        global stop_thread
        global MyThread
        stop_thread = False
    
    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)
    
    def main():
        set_globals()
        MyThread = threading.Thread(target = start_thread) 
        MyThread.start()
        # стартуем бота
        bot.polling(non_stop = True)
        
    if __name__ == '__main__':
        main()

    И все равно поток не останавливается! Можете просто сказать, что я делаю не так?