Windows 上的 Delphi、Python4Delphi、Anaconda、Oct2Py 和 Octave

问题描述 投票:0回答:0

我有一个 Delphi Win32 程序需要在 Octave 上运行一些脚本。我采用了通过 Python4Delphi 进入 Python“环境”的方法,我可以在其中编写和运行通过 Oct2Py 访问 Octave 的脚本。为了安装 Oct2Py,我放弃了安装 Windows Python,转而使用 Anaconda,它包括 Numpy 和 Oct2Py/Octave 设置所需/有用的其他东西。在沿途遇到一些死胡同之后,我实际上让一切正常工作 - 非常整洁的东西!但是,我在这里遇到了一些性能问题。考虑我通过 Python4Delphi 调用的 Python 脚本:

(1) from oct2py import Oct2Py
(2) oc = Oct2Py()
(3) oc.myScript(7)

当我从 shell 运行此脚本时,第 1 行大约需要 3 秒,第 2 行需要另一个;有趣的是,当从 Delphi/Python4Delphi 运行时,第 1 行似乎接近 0,而第 2 行大约为 1.3 秒。在所有情况下,第 3 行大约需要 200 毫秒。现在,我真正需要做的是在执行过程中对 oc.myScript() 进行多次调用,虽然 200 毫秒是合理的,但前两行的 1.3 到 4 秒是不可接受的。 “明显”的解决方案是以某种方式缓存前两行实现的与 Octave 连接的导入/初始化,然后将

oc
传递给后面重复的
oc.myScript()
调用——但是怎么做呢?

这里好像有三种可能:

  1. 返回
    oc
    到Delphi并让它“维持”它的生命周期;
  2. 以某种方式保持 TPythonEngine“实例”(不确定,但它可能不是实际对象,但概念是相同的);
  3. Python4Delphi 的 Demo09 包含一个似乎将想法 2 作为 DLL 执行的 DLL。

这里的一个相关问题是我想调用 Python 和 Octave 脚本,同时在调用之间保持某种历史/状态;换句话说,我真正想要的是以某种方式初始化 Python 和 Octave 环境一次,然后多次调用它们,使用“预初始化”环境,而不是每次调用之间将它们拆除并重建它们。这可行/合理/可以理解吗?

另一个想法:是否可以跳过 Python4Delphi/Python/Oct2Py 并直接从 Delphi 调用 Octave? FWIW - 我正在使用 Python4Delphi 方法来处理其他不相关的任务,所以这就是我开始的原因。

任何意见或建议将不胜感激!

python delphi octave oct2py python4delphi
© www.soinside.com 2019 - 2024. All rights reserved.