我有一个C ++库,它使用glog
CHECK
语句来资源运行时的各种条件。如果CHECK
失败,glog
将终止该程序。我的python程序需要来自这个C ++库的一些函数,所以我为这些函数编写了一个简单的C包装器并编译了一个dll,我可以使用ctypes
加载和使用它。
问题是,如果CHECK
语句失败,python程序会立即中止,用户将丢失所有未保存的工作!
相反,我想处理库中出现错误的情况作为python中的异常。 C ++库不是我编写的,重写它不是一个好的解决方案。当glog
CHECK
语句在从它调用的C ++库中失败时,如何防止我的python程序被终止?
答案 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))