Запуск Matlab shareEngine в качестве системного модуля - PullRequest
0 голосов
/ 30 октября 2018

Мне было интересно, смогу ли я запустить 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() в этом сеансе.

...