0

我决定创建一些测试台 Python 脚本,这些脚本将在各种环境下运行由多个开发人员开发的各种算法,这些算法都由 IPython 的并行分布式集群功能来运行。一个感兴趣的环境是 Matlab,但资源场景足够通用,可以从这个问题中抽象出规则。为了调用原型 Matlab 脚本,我决定使用Python 的 matlab 引擎. 这些引擎对象将在 Python 中实例化,但不是每个工作单元旋转一个,我想尽可能重用 Matlab 引擎,以避免创建和销毁那些强大的 Matlab 引擎对象的开销。我还处于阅读 IPython 并行文档的早期阶段,但我想我会先发制人地获得反馈,这样我就可以在遇到文档的特定部分时引起人们的注意。我什至可能会做出错误的假设,即我需要多个 Matlab 引擎来避免单个 Matlab 引擎实例的同步或线程安全问题。但是一般的问题是,如果我有一个可以并且应该被重用的资源,类似于隐藏在 Thread Local Storage 中的东西,这样当任务和作业接收下一个工作单元时,它们' 将重用该资源来完成他们的工作。一旦没有更多的工作单元,则可以在必要时关闭并销毁该资源。

4

1 回答 1

1

还没有完全弄清楚,但我会在这里记录我到目前为止发现的内容。

因此,在创建引擎并通过客户端的直接视图连接到它们之后,我可以在通过run方法连接到引擎的嵌入式 Python 实例中执行任何 ole python 代码。这包括为该 IPython 引擎创建一个 matlab 引擎...

rc = parallel.Client()
dview = rc[:]
        
for ipEngine in dview :
    ipEngine.run( "import matlab.engine" )
    ipEngine.run( "eng = matlab.engine.start_matlab('-noFigureWindows')" )

我仍然需要真正做到这一点,并弄清楚这个分布式环境中的所有变量范围规则,以及它如何与客户端上保存的环境相关,以及如何导航可能出现的命名空间冲突,但这看起来很有希望在引擎的嵌入式 python 实例中设置。随着答案从我的发展中滚滚而来,我将不断发展这个答案。

还有对象的推和拉来传递 Python 对象,尽管我不确定这在实践中如何使用 matlab 引擎和整个命名空间的东西,甚至关于远程计算机的环境和 matlab 的要求。安装在那里。

对于 Python 的 Matlab 引擎有一个已知限制,也值得在这里说明,可在Matlab External Interfaces pdf 文档的第 8 章“Python 引擎的 MATLAB 主题”中找到:

MATLAB Engine for Python 的限制

  • Python 的 MATLAB 引擎不是线程安全的
于 2015-05-29T00:10:18.193 回答