将Matlab shareEngine作为systemd单元运行

时间:2018-10-30 09:32:29

标签: matlab systemd

我想知道我是否可以将Matlab shareEngine作为系统单元来运行。背景是我想使用相应的API从Python脚本中连接一些Matlab代码。而运行shareEngine的服务可以让我重新连接到同一引擎,而不必每次都等Matlab启动(大约需要20秒)。

正在运行的很好的方法是启动Matlab并执行matlab.engine.shareEngine('session_name')。然后,在Python中,我可以找到(matlab.engine.find_matlab())并连接到(eng = matlab.engine.connect_matlab('session_name'))该会话。

systemd单元的优势在于,如果尚未运行,我可以从Python调用systemctl来自动启动该单元。

所以我设置了以下systemd单元

[Unit]
Description=MatlabSharedEngine

[Service]
ExecStart=/usr/local/bin/matlab -nojvm -r "matlab.engine.shareEngine('session_name');"

[Install]
WantedBy=multi-user.target

并以systemctl --user stop matlabSharedEngine开始。此外,使用systemctl --user status matlabSharedEngine,我可以检查会话是否已开始。 问题是,这次我无法在Python端找到该会话。 matlab.engine.find_matlab()的结果是一个空元组。

另一个问题是systemctl --user stop matlabSharedEngine似乎无法正确结束会话。因为重新启动服务时,无法重用相同的会话名称:

MATLAB session 'session_name' already exists. Current MATLAB session is now shared with default name 'MATLAB_759785'.

最好,我需要某种方式在该会话中执行exit()

0 个答案:

没有答案