【发布时间】:2021-03-22 11:05:39
【问题描述】:
我需要一种方法来中断较长的 sleep 函数,而不是将其拆分为多个 sleep(1) 或更短的时间。阻止它的方式可以是任何可能的方式,包括threading。
为了更深入的解释,我想做的是测试sleep 的限制,所以我正在编写一个自动程序重复调用sleep。捕获由sleep 提出的所有OverflowError。
我尝试过的:
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提出的异常,不想等多年才知道答案)
flag 或 stop 语句检查(if stop:exit) 方式不起作用,因为它们是在睡眠后执行的。
【问题讨论】:
-
sleep的全部意义在于暂停您的程序,使其停止执行。如果你想打断它,你需要使用别的东西。 -
@Mark Ransom 我认为这与您所链接的问题不同。在这里,OP 明确询问
time.sleep函数。他们不是在寻找与time.sleep具有相同效果的东西。并且有一个答案(多处理或守护进程)。但我不能给出它,因为问题已关闭。 -
@Multihunter 如果该问题有答案,它将在链接的副本上。问题完全一样。如果您有答案,请留在那里。
-
@Mark Ransom 对于这个特定的查询有很多答案。例如他们甚至需要杀死线程吗?他们可以使用
join(1)检查它是否抛出错误,否则就让它继续。这不是链接问题的解决方案,而是这里问题的解决方案。
标签: python python-3.x multithreading time sleep