梦回阑珊 2024-06-28 17:42 采纳率: 40%
浏览 4

C++调用python的jedi库问题

C++调用python的jedi库问题,jedi库能够实现python代码的补全功能,我想要在C++调用python脚本获取补全的字符串
python脚本如下:

import jedi

def get_completions1(code, line, column):
     # 使用Jedi创建一个脚本对象
    script = jedi.Script(code)

    # 获取补全建议
    completions = script.complete(line, column)
    return [comp.name for comp in completions]

C++部分代码如下:

std::string code = "import bin";
int line = 1;
int column = 10;
PyObject* pArgs;
pArgs = Py_BuildValue("(s,i,i)", code.c_str(), line, column);  
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);

现在的问题是当执行到PyObject_CallObject时开始调用python脚本中的函数,这时候电脑内存急剧升高到百分之99,这是发生了什么?,应该是从C++执行到python中的script = jedi.Script(code)时导致了内存的急剧升高从而导致整个系统卡死,后来我直接用python命令行跑了下这个脚本发现没有这个问题,但在C++调用却导致内存爆炸,大家知道是啥原因导致的吗,怎么修改?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-28 17:42
    关注

    引自免费微信小程序:皆我百晓生

    从您的描述来看,当从C++调用Python脚本并使用jedi库进行代码补全时,出现了内存急剧升高的问题。这种情况可能由多个因素导致,下面是一些可能的原因和解决方案:

    1. Jedi库与C++嵌入Python环境的交互问题

      • 当从C++嵌入Python环境调用Python脚本时,可能存在某些环境配置或初始化的问题,导致jedi库在内部操作时无法正确处理内存分配。
    2. 内存管理问题

      • jedi库在处理大量数据或执行某些操作时可能会占用较多内存。如果其内存管理在与C++交互的特定环境下存在问题,可能会导致内存泄漏或不当的内存使用。
    3. Python环境问题

      • 确保您在C++中使用的Python环境与您在命令行中测试的Python环境是相同的。不同版本的Python或不同的环境配置可能会导致行为差异。
    4. 解决方案

      • 检查Python和jedi版本:确保您在C++环境中使用的Python和jedi库的版本与您在命令行中测试的相匹配。
      • 分析内存使用情况:使用内存分析工具(如Valgrind)来检查内存泄漏或其他内存问题。这可以帮助您确定问题的根源。
      • 简化测试:尝试简化您的C++和Python代码,只保留与问题相关的部分,以更容易地定位问题。
      • 更新库:确保您的C++绑定的Python库(如Boost.Python或pybind11)以及jedi库都是最新版本,以排除因版本不匹配或已知问题导致的错误。
      • 分段调试:分别调试C++和Python部分,查看在哪一步开始出现问题。这有助于缩小问题的范围。
    5. 代码修改建议

      • 确保您的Python脚本在命令行下可以正常运行,并且没有任何内存泄漏问题。
      • 在C++中调用Python脚本时,确保正确地初始化了Python环境(例如使用Py_Initialize函数)。
      • 检查传递给Python脚本的参数是否正确,特别是code参数是否包含了正确的字符串。

    综上所述,要解决这个问题,您可能需要结合代码调试、内存分析以及库版本的检查来定位问题的根源,并采取相应的解决措施。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 6月28日
  • 创建了问题 6月28日

悬赏问题

  • ¥100 对接美团闪购医药接口相关问题
  • ¥15 嵌入式软件电子烟开发
  • ¥15 职场 Excel 查重问题
  • ¥20 multisim方波发生电路产生的波形异常,学校没讲模电就留了实验qwq
  • ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
  • ¥100 or-tools的相关问题
  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决