我有一个 C++ 库,它使用 glog
CHECK
语句来设置运行时的各种条件。如果 CHECK
失败,glog
将终止程序。我的 python 程序需要这个 C++ 库中的一些函数,所以我为这些函数编写了一个简单的 C 包装器并编译了一个 dll,我可以使用 ctypes
加载和使用它。
问题是,如果 CHECK
语句失败,python 程序会立即中止,用户会丢失所有未保存的工作!
相反,我想将库中出现问题的情况作为 python 中的异常处理。 C++ 库不是我写的,重写它不是一个好的解决方案。当 glog
CHECK
语句在从它调用的 C++ 库中失败时,如何防止我的 python 程序被终止?
最佳答案
一个快速的解决方案是在单独的进程中运行函数。 C++ 库中的函数很重(~1 秒),因此这可能是合理的。
最小的 Python 3 示例:
import ctypes
import multiprocessing
library = ctypes.cdll.LoadLibrary(...)
def RunFunction(params, queue):
queue.put(library.function(*params))
if __name__ == '__main__':
params = ...
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=RunFunction, args=(params, queue))
p.start()
p.join()
if p.exitcode == 0:
print("Function returned: {}".format(queue.get()))
else:
print("Non-zero exit code: {}".format(p.exitcode))
关于python - 防止失败的 glog CHECK 语句终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420265/