防止glog CHECK语句失败,终止程序

时间:2017-07-31 15:48:57

标签: python c++ c assert glog

我有一个C ++库,它使用glog CHECK语句来资源运行时的各种条件。如果CHECK失败,glog将终止该程序。我的python程序需要来自这个C ++库的一些函数,所以我为这些函数编写了一个简单的C包装器并编译了一个dll,我可以使用ctypes加载和使用它。

问题是,如果CHECK语句失败,python程序会立即中止,用户将丢失所有未保存的工作!

相反,我想处理库中出现错误的情况作为python中的异常。 C ++库不是我编写的,重写它不是一个好的解决方案。当glog CHECK语句在从它调用的C ++库中失败时,如何防止我的python程序被终止?

1 个答案:

答案 0 :(得分:0)

快速解决方案是在单独的过程中运行该功能。 C ++库中的函数很重(约1秒),所以这可能是合理的。

Minimal 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))