Мне нужен способ прервать длинную sleep
функцию, не разбивая ее на несколько sleep(1)
или более короткое время. Остановить это можно любым способом, в том числе и threading
.
Для более глубокого объяснения, то, что я пытаюсь сделать, это проверить предел sleep
, поэтому я пишу автоматический повторный вызов программы sleep
. Отлов всех OverflowError
поднятых sleep
.
Что я пробовал:
from time import sleep
import threading
def test(x):
try:
sleep(x) #kill the thread or anyway to interrupt the sleep AFTER execution
except:
return 1
addigit = True
t = ""
while True:
if addigit:
t= t+"9"
th = threading.Thread(target = test,args=(int(t),))
print("running:"+t)
ex = th.start()
#threading.Lock.release() not working
#th._stop()
print(ex)
if ex:
if addigit:
addigit = False
print("len:"+len(t))
Обратите внимание, что код неполный, мне нужен только способ остановки sleep
сразу после его выполнения. (Мне нужно только исключение, поднятое sleep
, я не хочу ждать годами, чтобы узнать ответ)
Способ проверки оператора флага или остановки (if stop:exit
) не будет работать, потому что они выполняются после сна.
@Mark Ransom Я думаю, что это вопрос, отличный от того, который вы связали. Здесь ОП явно спрашивает о функции time.sleep
. Они не ищут что-то, что имеет тот же эффект, что и time.sleep
. И на это есть ответ (многопроцессорность или демоны). Но дать не могу, потому что вопрос закрыт.
@Multihunter, и если бы был ответ на этот вопрос, он был бы на связанном дубликате. Вопрос точно такой же. Если у вас есть ответ, оставьте его там.
@Mark Ransom ВОКРУГ есть ответы на этот конкретный запрос. например им вообще нужно убивать нить? Они могут использовать join(1)
, чтобы проверить, не возникла ли ошибка, а в противном случае просто оставить ее. Это не было бы решением связанного вопроса, но является решением этого вопроса здесь.
Вместо этого я бы вызвал wait() для объекта threading.Event. Это то, что я обычно делаю для такой проблемы.
Вот пример: https://stackoverflow.com/a/38828735/14804613
я попробую с этим, похоже, хорошее решение.
Весь смысл
sleep
состоит в том, чтобы приостановить вашу программу, чтобы она перестала выполняться. Вам нужно будет использовать что-то еще, если вы хотите прервать его.