中断一个非常长的睡眠功能[重复]

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提出的异常,不想等多年才知道答案)

flagstop 语句检查(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 我会试试的,看起来是个不错的解决方案。

以上是关于中断一个非常长的睡眠功能[重复]的主要内容,如果未能解决你的问题,请参考以下文章

android程序中的睡眠功能[重复]

睡眠导致具有不可见内容的框架[重复]

在较长的数字之间添加逗号[重复]

JavaScript在继续之前睡眠/等待[重复]

使计算机进入睡眠状态是啥意思

使用两个线程会导致 JavaFX 崩溃 [重复]