1

Тема: Як зупинити виконаня функції def Python

Нписав ехо бота і дописав код для активації командою, хочу таже зупиняти теж командою не зупеняючи скрипт.
Мені не виходить зупинити виконання тільки цієї функції зупиняється все, тобто скрипт працює без помилок але жодна команда не працює.

from threading import Thread
import telebot
import config

bot = telebot.TeleBot(config.TOCEN)

#echo
@bot.message_handler(commands=['cache'])
def cache_start(message):
    bot.send_message(message.chat.id, "Папугай кеша в ділі")

    @bot.message_handler(content_types=['text'])
    def echo(message):
        bot.send_message(message.chat.id, message.text)


@bot.message_handler(commands=['cachestop'])
def cache_stop(message):
    threads = []
    commands = input('cachestop')
    if commands == 'cachestop':
        threads.append(Thread(tarfile=cache_start,))
        pass
    bot.send_message(message.chat.id, "Кеша мовчить")

bot.polling()

Як це можна реалізувати тільки конкретно для зупинки однієї фцнкції ?

2

Re: Як зупинити виконаня функції def Python

Як варіант - оголосити змінну і перевіряти її перед потрібним кроком в if-then-else або ж у while, виходити з процесу коли змінна набуває потрібного для зупинки значення.

3

Re: Як зупинити виконаня функції def Python

frz написав:

Як варіант - оголосити змінну і перевіряти її перед потрібним кроком в if-then-else або ж у while, виходити з процесу коли змінна набуває потрібного для зупинки значення.

Переписав на такий варіант

@bot.message_handler( commands=['cachestop'])
def cache_stop(message):
    threads = []
    commands = 'cachestop'
    if commands == 'cachestop':
        cs = threads.append(Thread(name=cache_start))
        #pass
        #sys.exit(cs)
        #os.system(cs)
        #exit(cs)
        #quit(cs)
    bot.send_message(message.chat.id, "Кеша мовчить")

Але нічого не працює.
Якшо прописую один раз то нічого не відбувається якшо два рази вести то зупиниться повністю вся програма.

4

Re: Як зупинити виконаня функції def Python

Тут питання, як саме ви намагаєтеся передати нове значення змінної.

import time

var_stop = False

i = 0

while not var_stop:
    print(i)
    time.sleep(5)
    i = i + 1

Ось тут якщо в мене "var_stop = False" лише на третій стрічці, то в циклі про зміну значення змінної не буде відомо. А от якщо всередині циклу, скажімо, перепитувати яке значення має змінна відповідно до environment variable (змінна оточення), встановленої на рівні операційної системи (наприклад, для лінукса це ~/.bashrc), тоді таке можливо.

5

Re: Як зупинити виконаня функції def Python

Що саме робить аргумент tarfile?