функция выхода не работает с методом обработки потоков

#python #multithreading #exit

#python #многопоточность #выход

Вопрос:

Мне нужна помощь с моим кодом, который я использовал для использования exit() функции на python, но сегодня я попытался использовать библиотеку потоков в своем коде:

 import time
import threading

ts = time.time()
ts_after = ts   5


def printit():
    global ts_after
    threading.Timer(1.0, printit).start()
    ts1 = time.time()
    if int(ts1) >= int(ts_after):
        print("11")
        exit()
    else:
        pass


printit()
  

это работает очень хорошо, а print("11") также работает, но exit() после печати не работает и продолжает печатать 11

Комментарии:

1. import sys ?

2. Что должен делать этот код в первую очередь? Закрыть текущий поток int(ts1) >= int(ts_after) ? Или закрыть приложение? Или что-то еще?

3. Вы должны использовать sys.exit() . И даже если вы это сделаете, ваш код бесконечно запускает новые потоки. Вы должны запустить новый поток вне функции, которая вызывается в потоке.

4. я попробовал импортировать sys и не сработал, и этот код делает тест для student через n раз, когда он закроется

5. вы создаете несколько потоков — бесконечно, чтобы быть точным. если exit() работает, он закрывает только один поток, а не все потоки

Ответ №1:

Использование cancel() метода в Timer экземпляре, похоже, приводит к желаемому поведению:

 import time
import threading

ts = time.time()
ts_after = ts   5


def printit():
    global ts_after
    my_thread = threading.Timer(1.0, printit)
    my_thread.start()
    ts1 = time.time()
    if int(ts1) >= int(ts_after):
        print("11")
        my_thread.cancel()
    else:
        pass


printit()
  

cancel() Метод просто останавливает Timer экземпляр до его начала. Обратите внимание, что, вероятно, хорошей идеей будет расширить этот код, чтобы он мог также завершать Timer объекты, которые уже запущены.