我想知道我是否可以将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()
。