如何从 Python 函数外部停止执行该函数?

use*_*328 5 python function exit

所以我有一个我使用的库,并且在我的一个函数中我调用了该库中的一个函数,这恰好需要很长时间。现在,同时我有另一个线程在运行,我在其中检查不同的条件,我想要的是,如果满足条件,我想取消库函数的执行。

现在我正在检查函数开始时的条件,但是如果在库函数运行时条件发生变化,我不需要它的结果,并且想从中返回。

基本上这就是我现在所拥有的。

def my_function():
    if condition_checker.condition_met():
        return
    library.long_running_function()
Run Code Online (Sandbox Code Playgroud)

有没有办法每秒运行一次条件检查,并在满足条件时从 my_function 返回?

我考虑过装饰器、协程,我正在使用 2.7,但如果这只能在 3.x 中完成,我会考虑切换,只是我不知道如何实现。

小智 3

您无法终止线程。库要么按设计支持取消,在内部,它必须每隔一段时间检查一次条件,以便在请求时中止,要么您必须等待它完成。

您可以做的是在子进程而不是线程中调用库,因为进程可以通过信号终止。Python 的multiprocessing模块提供了一个类似线程的 API,用于生成分叉和处理 IPC,包括同步。

或者,如果分叉subprocess.Popen对您的资源占用太大(例如,通过复制父进程的内存占用),则可以通过生成一个单独的子进程。

不幸的是,我想不出任何其他方法。