中断一个非常长的睡眠功能[重复]
Posted
技术标签:
【中文标题】中断一个非常长的睡眠功能[重复]【英文标题】:Interrupt a really long sleep function [duplicate] 【发布时间】: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)
检查它是否抛出错误,否则就让它继续。这不是链接问题的解决方案,而是这里问题的解决方案。
【参考方案1】:
我会改为在 threading.Event 对象上调用 wait()。对于此类问题,我通常会这样做。
这是一个例子: https://***.com/a/38828735/14804613
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 我会试试的,看起来是个不错的解决方案。以上是关于中断一个非常长的睡眠功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章