#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
объекты, которые уже запущены.