【问题标题】: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) 检查它是否抛出错误,否则就让它继续。这不是链接问题的解决方案,而是这里问题的解决方案。

标签: python python-3.x multithreading time sleep


【解决方案1】:

我会改为在 threading.Event 对象上调用 wait()。对于此类问题,我通常会这样做。

这是一个例子: https://stackoverflow.com/a/38828735/14804613

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 我会试试的,看起来是个不错的解决方案。
猜你喜欢
  • 2023-03-29
  • 2012-01-12
  • 2011-04-08
  • 2021-04-12
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多