在哪里以及如何为IPython集群任务启动可重用资源(matlab.engine)

时间:2015-05-20 23:42:10

标签: python ipython cluster-computing ipython-parallel matlab-engine

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

1 个答案:

答案 0 :(得分: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实例中设置东西。当我从开发中得出答案时,我将逐步发展这个答案。

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

对于值得论述的python的Matlab引擎存在一个已知的限制,可以在Matlab External Interfaces pdf文档的第8章“Python主题的MATLAB引擎”中找到:

  

MATLAB Engine for Python的限制

     
      
  • 用于Python的MATLAB Engine不是线程安全的
  •   
相关问题