Python C API错误重新启动解释器

问题描述

我正在开发一个小DLL,作为C ++应用程序和Python脚本之间的代理。我想公开一个重新启动python解释器的函数。我已经尝试过这样的事情:

    void initialize()
    {
        Py_Initialize();
    }

    void finalize()
    {
        Py_Finalize();
    }

我可以初始化解释器并将其完成,但是当我想再次启动它时,出现以下错误

C:\A\31\s\Objects\structseq.c:398: bad argument to internal function

我检测到在Python代码中导入第三方模块(例如numpy,pandas,tensorflow等)时会发生这种情况。我认为这是由于在完成后释放内存时遇到的一些问题,但不确定。该文档说:

错误和警告:破坏模块和模块中的对象的顺序是随机的。当析构函数 del ()方法)依赖于其他对象(甚至函数)或模块时,它们可能会失败。不会卸载由Python加载的动态加载的扩展模块。 Python解释器分配的少量内存可能无法释放(如果发现泄漏,请报告)。不能释放对象之间循环引用中占用的内存。扩展模块分配的某些内存可能无法释放。如果某些扩展程序的初始化例程被多次调用,则它们可能无法正常工作。如果应用程序多次调用Py_Initialize()和Py_FinalizeEx(),则会发生这种情况。

我想创建一个子解释器,并使用它运行我的python脚本。当我想重新启动解释器时,我可以完成子解释器的创建并创建一个新的。但是我不确定这是否是最好的方法,尤其是考虑线程。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)