Python线程中断睡眠

Python线程中断睡眠,python,multithreading,thread-sleep,Python,Multithreading,Thread Sleep,python中有没有一种方法可以在线程睡眠时中断它? (正如我们在java中所做的那样) 我在找这样的东西 import threading from time import sleep def f(): print('started') try: sleep(100) print('finished') except SleepInterruptedException: print('interrupted') t = t

python中有没有一种方法可以在线程睡眠时中断它? (正如我们在java中所做的那样)

我在找这样的东西

  import threading
  from time import sleep

  def f():
      print('started')
  try:
      sleep(100)
      print('finished')
  except SleepInterruptedException:
      print('interrupted')

t = threading.Thread(target=f)
t.start()

if input() == 'stop':
    t.interrupt()

线程正在休眠100秒,如果我键入“停止”,它将中断

使用条件对象如何:


使用wait(timeout)代替sleep()。要“中断”调用notify()。

正确的方法是使用
threading.Event
。例如:

import threading

e = threading.Event()
e.wait(timeout=100)   # instead of time.sleep(100)
在另一个线程中,您需要访问
e
。您可以通过发出以下命令来中断睡眠:

e.set()

这会立即中断睡眠。您可以检查
e.wait
的返回值以确定它是否超时或中断。有关更多信息,请参阅文档:.

如果出于任何原因,您需要使用
time.sleep
函数,并且碰巧期望
time.sleep
函数引发异常,并且您只想用较大的睡眠值测试发生了什么,而不必等待整个超时

首先,休眠线程是轻量级的,只需让它们在后台进程模式下运行
threading.Thread(target=f,daemon=True)
(这样它们就可以在程序运行时退出)。您可以使用
t.join(0.5)
检查线程的结果,而无需等待整个执行


但是,如果您确实需要停止函数的执行,您可以使用,并在生成的进程上调用
.terminate()
。这并没有给进程清理时间(例如,
除了
最后
块没有运行),所以请小心使用。

您可以实现并使用
事件。等待(100)
循环100
时间。睡眠(1)
并检查是否有异常