5

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

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

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

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

4

6 回答 6

35

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

首先实施您最熟悉并且可以最快实施的版本。然后对其进行基准测试。如果太慢,你有三个选项应该按顺序完成:

  • 首先,优化你的 Python 代码
  • 如果这还不够,请用 C/C++ 编写对性能最关键的函数,然后从 Python 代码中调用它
  • 最后,如果你真的需要顶级性能,你可能不得不用 C++ 重写整个东西。但至少你会在 Python 中拥有一个工作原型,并且你会对应该如何实现它有一个更清晰的想法。您将知道要避免哪些陷阱,并且您将拥有一个已经正确的实现来测试和比较结果。
于 2009-09-30T13:44:01.413 回答
12

Python 在处理大量非字符串数据方面非常慢。对于某些操作,您可能会看到它比 C/C++ 慢 1000 倍,所以是的,在使用 Python 制作时间关键型算法之前,您应该对此进行调查并进行必要的基准测试。

但是,您可以使用 C/C++ 代码中的模块扩展 python,以便时间关键的事情很快,同时仍然能够将 python 用于主要代码。

于 2009-09-30T13:36:28.360 回答
5

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

于 2009-09-30T15:09:50.437 回答
1

如果您的大部分运行时都花在 C 库中,那么您用来调用这些库的语言并不重要。你的吃时间的图书馆是用什么语言写的?

于 2009-09-30T16:28:37.657 回答
0

根据您的描述,速度应该不是什么大问题(您可以使用 C、cython 以及任何您想要让它更快的东西),但内存会是。对于最大 64 Mb 的环境(操作系统和所有环境也应该适合,对吗?),我认为 python 很有可能不是目标部署的正确工具。

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

于 2009-10-01T06:33:58.407 回答
0

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

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

于 2009-10-23T10:55:21.840 回答