【问题标题】:Convert Python Project Into C将 Python 项目转换为 C
【发布时间】:2018-07-11 11:26:42
【问题描述】:

我是 python 新手,但有 C 方面的经验。

我有一个 python 3 项目,包括一个 main.py 文件和其他一些 .py 文件,位于另一个文件夹中,如下所示:

Root
├── main.py
├── subfolder1
│   ├── __init__.py
│   ├── models.py
│   └── subfolder2
│       ├── __init__.py
│       └── models.py

ma​​in.py 内:

from subfolder1.model import BaseClass

第一个__init__.py

from .model import BaseClass

第二个__init__.py

from .model import BaseClass

我想将此项目转换为 C 项目以提高其性能,在此项目中使用了很多库,如 numpysklearnkerasscipy

我试过cython,我知道如何从main.py 获取main.c,但是对于其他文件以及如何转换和使用子类方法,有没有办法用一个@987654335 转换整个项目@?(我从它的文档中不太了解)

主要目的是在 C 中运行并获得更好的性能,所以如果有其他方法,请提供帮助。

谢谢。

=================================编辑=========== =========================

我想在models.py 中使用BaseClass 方法和C Projectmain.py 中的函数,问题是如何在子文件夹中使用其他.py 文件并使用@987654342 生成C 代码@。我能够转换单个 python 文件main.py,但不知道如何在我的C Project 中添加、导入或...其他文件。

再次感谢。

【问题讨论】:

  • 除非瓶颈在你的代码中,否则你真的无能为力。您使用的 Python 库经过高度优化,其关键部分已经用 C 或 C++ 编码。要找到你需要profile你的代码的瓶颈。即使您的代码瓶颈,您也可以优化最差的部分,或者仅将部分代码转换为 C,而不是重写整个项目。
  • Apache Spark 你可能也会感兴趣。它还具有 ML 功能并且可以很好地处理并行化(是的,它也适用于 Python)。我绝对同意其他人的观点,尽管您应该分析您的代码。您的逻辑可能是某个地方的瓶颈,尽管 Spark 还可以在该修复的基础上为您提供额外的性能。

标签: python c inheritance cython cythonize


【解决方案1】:

我相信答案是否定的——您无法对整个项目进行简单的 C 转换。至少,不是以可能为您提供更好性能的方式。此外,您列出的库大多已经用 C 实现,因此对这些库的调用通常很快。

您是否分析过代码?我认为如果你能确定瓶颈所在而不是尝试完全转换,你会更幸运。

【讨论】:

  • 您好,感谢您的建议,您的意思是我可以将代码中一些耗时的函数移到 C 中并重新实现它们,然后从 python 中调用它们,这会给我带来更好的性能吗?跨度>
  • 这是一条合理的路径。如果你熟悉 C 语言,那么编写 python 扩展非常简单(参见docs.python.org/3/extending/index.html)。
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多