当前位置: 首页 > 面试题库 >

扩展python-swig,而不是swig或Cython

邵刚洁
2023-03-14
问题内容

我在python代码中发现了瓶颈,并与psycho等打交道。然后决定编写ac / c ++扩展以提高性能。

借助swig,您几乎不需要关心参数等。一切正常。

现在我的问题是:swig创建了一个很大的py文件,该文件在调用实际的.pyd或.so代码之前会执行很多“检查”和“ PySwigObject”。

你们中的任何人是否有经验,如果您手动编写此文件或让wig来做,是否可以获得更多性能。


问题答案:

可以肯定的是,手动执行操作始终可以提高性能,但是与执行此操作所需的精力相比,增益将非常小。我没有任何数据可以提供给您,但我不建议您这样做,因为您将需要手工维护该接口,如果您的模块很大,这不是一个选择!

选择正确的方法来选择使用脚本语言是因为您希望快速开发。这样您就避免了早期的优化综合症,现在您要优化瓶颈部分,太好了!但是,如果您手动执行C /
python接口,您肯定会陷入早期优化综合症。

如果您希望使用更少的接口代码,可以考虑从C代码创建一个dll,然后通过cstruct直接从python使用该库。

如果只想在程序中使用python代码,请考虑Cython。



 类似资料:
  • SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中 也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCA

  • swig 是node端的一个优秀简洁的模板引擎,类似Python模板引擎Jinja,目前不仅在node端较为通用,相对于jade、ejs优秀,而且在浏览器端也可以很好地运行。 特性: 支持大多数主流浏览器。 表达式兼容性好。 面向对象的模板继承。 将过滤器和转换应用到模板中的输出。 可根据路劲渲染页面。 支持页面复用。 支持动态页面。 可扩展、可定制。 使用示例: 模板代码 <h1>{{ page

  • 问题内容: 我有用swig包装的类的C 代码。我无法修改代码或包装。在python中,我具有使用ctypes的指向所述C 类实例的指针。如何围绕该指针创建一个Swig包装器? 我知道swig对象拥有一个’this’属性,该属性在内部指向包装的对象,但是我找不到一种将其设置为我手头的指针的方法。 谢谢您的帮助! 问题答案: 您 可以 执行此操作,但是这需要大量工作,并且解决使ctypes或SWIG接

  • 我有一个库。它是通过SWIG进行包装的。我想创建一个插件来扩展它。插件需要一个来自已经包装的库的类来运行具有类似的东西。库从Java和c#中使用。现在这个插件也将从那里使用。库和插件是分开的dll的。如何高SWIG,我已经有那个类型在创建插件绑定时进行包装?

  • 问题内容: 我正在尝试使用swig从python使用以下原型访问C函数: Swig创建.so没问题,我可以将其导入python,但是当我尝试使用以下命令进行访问时: 我得到以下回溯: 该指针应该是一个int数组,其大小由memoryCells定义 问题答案: 如果可以,请使用ctypes。更简单。但是,由于您要求输入SWIG,因此需要的是一个描述如何处理int *的类型图。SWIG不知道可以指向多

  • 我也在尝试在PHP中使用我的C类。在我的C代码中,我将typedef声明为: 所以我打算让SWIG在包装类中考虑我的typedef,我的接口文件如下: 在我的测试代码中,我将类型称为: 但我有以下错误: 附言:我的接口文件中也包含了“stdint.I”,但也出现了同样的错误 有什么想法吗?