Cython之间的差异,使用Python.h扩展C / C ++等

时间:2016-06-08 20:43:38

标签: python cython ctypes python-extensions

现在我有一个图像处理算法,在Python中大约有100行左右。使用numpyPILscipy大约需要500毫秒。我希望得到它更快,因为到目前为止,实际算法看起来非常优化,我想知道使用Cython之类的其他方法是否会改善时间。我相信我可以做几件不同的事情:

  1. 使用Cython 将C库的相关部分公开给Python。
  2. 使用Ctypes 只是用C编写所有内容但仍然使用纯Python(完全不倾向于此)
  3. 在C / C ++中创建扩展模块,然后导入并调用这些函数。我不确定我是否能够以这种方式使用numpy
  4. 创建DLL 并让Python加载它。这不会使用numpy或那些模块,但仍然非常有效。
  5. 我只是在这里寻找速度,而不是担心实施的困难。在这种情况下,是否有任何一种选择更好,它们是否相同,或者甚至值得做什么?

1 个答案:

答案 0 :(得分:2)

这有助于了解您需要做什么。

如果您没有使用ctypes进行函数调用,那么它不太可能为您节省任何涉及ctypes类型的内容。如果你已经有一些DLL存在“为我解决”功能,那么确定,ctypes它就是。

Cython创建扩展模块,因此您可以使用扩展模块完成Cython所做的任何事情,这取决于您手动编写扩展的舒适程度。 Cython比手工编写扩展更有限,并且更难以“看到”性能(优化Cython的规则基本上与优化CPython代码相反,如果你忘记了cdef正确的东西,你什么都得不到),但Cython通常也更简单。

如果你有非Python的用途,编写一个单独的非扩展DLL是值得的;否则,Python扩展基本上只是DLL的情况,但更好地集成。

基本上,根据定义,无限的时间和技能,CPython扩展将击败任何其他性能选项,因为它可以完成其他人所做的一切,甚至更多。这只是更多的工作,容易犯错误(因为你写的是C,这很容易出错)。