Мне было интересно, смогу ли я запустить Matlab shareEngine
как системный модуль. Фоном является то, что я хочу связать некоторый код Matlab из скрипта Python, используя соответствующий API . А наличие службы с работающим shareEngine
позволило бы мне повторно подключиться к одному и тому же двигателю без необходимости каждый раз ждать запуска Matlab (это занимает около 20 секунд).
Что отлично работает, так это запуск Matlab и исключение matlab.engine.shareEngine('session_name')
. В Python я могу найти (matlab.engine.find_matlab()
) и подключиться к (eng = matlab.engine.connect_matlab('session_name')
) этой сессии.
Преимущество модуля systemd заключается в том, что я могу позвонить systemctl
из Python, чтобы автоматически запустить модуль, если он еще не запущен.
Итак, я настроил следующий системный модуль
[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()
в этом сеансе.