1

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

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

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

4

1 回答 1

0

一个快速的解决方案是在单独的进程中运行该函数。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))
于 2017-07-31T18:17:19.217 回答