我有一个小部件可以测量经过的时间,然后在一段时间后它会执行命令。但是,如果留下小部件,我希望它中止此函数调用而不执行命令。
我该怎么做?
使用该threading
模块并启动一个将运行该函数的新线程。
仅仅中止函数是一个坏主意,因为您不知道是否在危急情况下中断线程。您应该像这样扩展您的功能:
import threading
class WidgetThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self._stop = False
def run(self):
# ... do some time-intensive stuff that stops if self._stop ...
#
# Example:
# while not self._stop:
# do_somthing()
def stop(self):
self._stop = True
# Start the thread and make it run the function:
thread = WidgetThread()
thread.start()
# If you want to abort it:
thread.stop()
为什么不使用线程并停止它?我认为不可能在单线程程序中拦截函数调用(如果没有某种信号或中断)。
此外,对于您的具体问题,您可能需要引入一个标志并在命令中检查它。
不知道python线程,但通常中断线程的方式是拥有某种可以从小部件设置的线程安全状态对象,以及线程代码中的逻辑来检查状态对象值的变化并中断出线程循环。