Python的性能是否值得花费?

时间:2009-09-30 13:32:46

标签: python c embedded fuzzy-logic

我正在考虑实现基于PyFuzzy(Python)或FFLL(C ++)库的模糊逻辑控制器。

我更喜欢使用python,但我不确定它在嵌入式环境中的性能是否可以接受(ARM或嵌入式x86处理~64Mbs的RAM)。

主要关注的是响应时间尽可能快(更新速率为5hz +将是理想的> 2Hz是必需的)。该系统将从RS232端口读取多个(可能是5个)传感器,并根据模糊评估结果提供2/3输出。

我是否应该担心Python对于此任务来说太慢了?

6 个答案:

答案 0 :(得分:35)

一般来说,在你真正看到它成为一个问题之前,你不应该过分关注它。由于我们不知道您的应用程序的详细信息,因此我们无法说明如果在Python中实现它的性能。既然你还没有实现它,你也不能。

实施您最熟悉的版本,并且可以先实现最快。然后测试它。而如果太慢,你有三个选项应该按顺序完成:

  • 首先,优化您的Python代码
  • 如果这还不够,请在C / C ++中编写性能最关键的函数,并从Python代码中调用它
  • 最后,如果你真的需要最佳性能,你可能不得不用C ++重写整个事情。但至少你会有一个Python的工作原型,你会更清楚地了解它应该如何实现。你会知道要避免哪些陷阱,你将有一个已经正确的实现来测试和比较结果。

答案 1 :(得分:11)

Python在处理大量非字符串数据时非常缓慢。对于某些操作,您可能会发现它比C / C ++慢1000倍,所以是的,在使用Python制作时间关键算法之前,您应该研究这个并做必要的基准测试。

但是,您可以使用C / C ++代码中的模块扩展python,以便时间紧迫的事情很快,同时仍然可以使用python作为主代码。

答案 2 :(得分:5)

让它工作,然后让它快速运作。

答案 3 :(得分:1)

如果大多数运行时都花在C库中,那么用于调用这些库的语言并不重要。你的时间吃饭的图书用什么语言编写?

答案 4 :(得分:0)

根据你的描述,速度不应该是一个问题(你可以使用C,cython,无论你想要什么,使它更快),但内存将是。对于最大64 Mb的环境(操作系统和所有系统都应该适合,对吧?),我认为python很可能不是目标部署的正确工具。

如果你有非平凡的逻辑要处理,我仍然会在python中进行原型设计。

答案 5 :(得分:0)

我从未真正测量过pyfuzzy示例的性能,但是新版本0.1.0可以像FFLL那样读取FCL文件。只需用这种格式描述您的模糊系统,编写一些包装器,并检查两种变体的性能。

对于使用pyfuzzy读取FCL,您需要antlr python运行时,但在阅读之后您应该能够pickle读取对象,因此您不需要在目标上使用antlr开销。