【发布时间】:2011-12-06 23:05:51
【问题描述】:
我正在努力将 Python 嵌入到我们的测试套件应用程序中。目的是使用 Python 运行多个测试脚本来收集数据并制作测试报告。一个测试运行的多个测试脚本可以创建可在下一个脚本中使用的全局变量和函数。
应用程序还提供了嵌入解释器中导入的扩展模块,用于与应用程序交换一些数据。
但用户也可以进行多次测试运行。我不想在多个测试运行之间共享这些全局变量、导入和交换数据。我必须确保以真正的状态重新启动以控制测试环境并获得相同的结果。
我应该如何重新初始化解释器?
我使用了 Py_Initialize() 和 Py_Finalize(),但在第二次初始化我提供给解释器的扩展模块时,在第二次运行时出现异常。 还有文档warns against using it more than once。
使用sub-interpreters 似乎与扩展模块初始化有相同的注意事项。
我怀疑我的扩展模块初始化有问题,但我担心第 3 方扩展模块也会出现同样的问题。
也许可以通过在它自己的进程中启动解释器来让它工作,以确保所有内存都被释放。
顺便说一句,我正在使用 boost-python,它也使用 Py_Finalize 警告 AGAINST!
有什么建议吗?
谢谢
【问题讨论】:
标签: c++ python boost embed boost-python