有没有办法编写命令以中止正在运行的函数调用?

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 线程,但一般来说,中断线程的方式是拥有某种可以从小部件设置的线程安全状态对象,以及线程代码中的逻辑来检查状态对象的变化值并跳出线程循环。

【讨论】:

以上是关于有没有办法编写命令以中止正在运行的函数调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问函数内调用者的命令行参数?

使用一个信号进行多次 fetch() 以中止它们

IntelliJ 的搜索模板语言是不是有办法识别没有被 if 语句包装的函数调用

调用以 std::list 作为参数的 C++ 函数

在代码中获取调用者函数的名字

单击按钮时中止正在运行的功能