python - 防止失败的 glog CHECK 语句终止程序

标签 python c++ c assert glog

我有一个 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/

相关文章:

python - matplotlib.pyplot.axes.bbox 的定义

c++ - 创建套接字函数返回-1

c++ - 获取 ibus 设置的实际键码

c - SDL 中的文本输入框

C:更改字符串中的字符

python - Tkinter 从 PopUp 中读取输入值

python - 将属性添加到 Python 字典中的现有对象

python - 如何消除 double_click_input() 操作的延迟?

c++ - 我如何解析 H264 文件和帧

c++ - 在执行之前知道Linux命令是否存在的方法