在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秒,如果我输入'stop',它就会中断
发布于 2016-08-08 20:03:55
如何使用condition对象:https://docs.python.org/2/library/threading.html#condition-objects
您可以使用wait(timeout)代替sleep()。要“中断”,您可以调用notify()。
发布于 2017-03-10 13:11:28
正确的方法是使用threading.Event。例如:
import threading
e = threading.Event()
e.wait(timeout=100) # instead of time.sleep(100)在另一个线程中,您需要访问e。您可以通过发出以下命令来中断睡眠:
e.set()这将立即中断睡眠。您可以检查e.wait的返回值,以确定它是否超时或中断。有关详细信息,请参阅文档:https://docs.python.org/3/library/threading.html#event-objects。
发布于 2020-12-11 11:05:51
如果您出于某种原因需要使用time.sleep函数,并且碰巧希望time.sleep函数抛出异常,并且您只是想测试较大的休眠值会发生什么情况,而不必等待整个超时时间……
首先,休眠线程是轻量级的,只要让它们在threading.Thread(target=f, daemon=True)的守护程序模式下运行就没有问题(这样当程序退出时,休眠线程就会退出)。您可以使用t.join(0.5)检查线程的结果,而无需等待整个执行过程。
但是,如果您确实需要暂停函数的执行,则可以使用multiprocessing.Process,并在衍生的进程上调用.terminate()。这不会给进程时间来清理(例如,except和finally块没有运行),所以要小心使用它。
https://stackoverflow.com/questions/38828578
复制相似问题