有没有办法编写命令以中止正在运行的函数调用?
Posted
技术标签:
【中文标题】有没有办法编写命令以中止正在运行的函数调用?【英文标题】:Is there a way to write a command so that it aborts a running function call? 【发布时间】:2010-09-01 18:38:23 【问题描述】:我有一个小部件可以测量经过的时间,然后在一段时间后它会执行命令。但是,如果留下小部件,我希望它中止此函数调用而不执行命令。
我该怎么做?
【问题讨论】:
【参考方案1】:使用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()
【讨论】:
【参考方案2】:为什么不使用线程并停止它呢?我认为不可能在单线程程序中拦截函数调用(如果没有某种信号或中断)。
此外,对于您的具体问题,您可能需要引入一个标志并在命令中进行检查。
【讨论】:
【参考方案3】:不知道 python 线程,但一般来说,中断线程的方式是拥有某种可以从小部件设置的线程安全状态对象,以及线程代码中的逻辑来检查状态对象的变化值并跳出线程循环。
【讨论】:
以上是关于有没有办法编写命令以中止正在运行的函数调用?的主要内容,如果未能解决你的问题,请参考以下文章