我正在制作一个应用程序,它使用几种不同的算法(代理)来分析一个或多个数据序列,我想到了一个想法,即每个代理都可以作为单独的Python脚本来实现,我可以在应用程序中使用Python C API或Boost.Python来运行这些脚本。
我有点担心运行时开销TBH,因为我正在做一些相当繁重的数据处理,我不想为每个模拟等待几分钟。我通常会进行数十万次迭代,如果不是数百万次的话,在这些迭代中我调用外部“代理”;我是更好的只是硬编码的一切在应用程序中,或将性能下降是可以容忍的?
另外,除了Python,我还可以使用其他解释语言吗?
7条答案
按热度按时间56lgkhnf1#
是的,很多。Lua和Python似乎是最流行的:
嵌入Lua
嵌入Python
嵌入Tcl
嵌入Ruby
嵌入Perl
嵌入JavaScript
JavaScript引擎有几十种,这只是一个例子,其中一些也快得吓人。
yruzcnhs2#
Lua的速度相当快,因为它是,如果你需要更多的速度,尝试LuaJIT,这是优秀的。
pcww981p3#
Tcl从一开始就被设计成一种嵌入式语言。
yzckvree4#
我通常会进行数十万次(如果不是数百万次的话)的迭代,在这些迭代中我调用外部“代理”
性能下降将是明显的,也许是痛苦的,如果你能把数据放进数组,然后用NumPy批量处理,应该会快得多。
NumPy使得在一行中进行一百万次运算变得超级容易,例如,对数组的每个元素求平方如下:
超级简单,这里紧密的内部循环实际上是用C实现的。
当然,NumPy还可以做更高级的数字处理。
esyap4oy5#
我相信tcl和Rexx都是为了这个目的而设计的。
e5nszbig6#
对于数百万次对python的调用(我假设是c++,因为你提到了boost),是的:你会注意到性能的下降。这可能很重要,也可能不重要--也许尝试新的“代理”所带来的速度增益会比下降更大。Python确实有快速的数值库(比如numpy),这可能会有所帮助,但是你仍然会产生数据编组、调用python、gil等的开销。
是的,您可以嵌入许多其他语言:请查看lua,也可以查看swig.org,它可以连接到除python之外的许多其他语言。
q7solyqu7#
你可以使用C++模板和运算符重载来创建一个嵌入式语言,例如参见ublas或ftensor matrix languages。我不认为python或其他解释性语言适合进行数字运算/数据处理。