Общий сеанс Matlab заблокирован устаревшей информацией о предыдущем сеансе с тем же именем - PullRequest
0 голосов
/ 04 сентября 2018

Я использовал общие сеансы Matlab, чтобы программа на Python могла подключаться к движку и многократно запускать некоторые вещи без задержки каждый раз при запуске нового экземпляра Matlab. Я использую жестко запрограммированное имя, чтобы программа Python знала, как найти движок Matlab.

Я использую:

matlab -nojvm -nosplash -r matlab.engine.shareEngine('my_session_name')"

Сегодня я должен был kill процесс MATLAB, потому что ... ну, потому что это заняло слишком много времени, и я хотел начать все заново. Давайте не будем останавливаться на этом плохом решении.

Когда я попытался запустить другую копию, используя то же имя сеанса, он выдал мне эту ошибку:

Error using matlab.engine.shareEngine (line 41)
MATLAB session 'my_session_name' already exists.  Current MATLAB session is now shared with default
name 'MATLAB_15886'.

Вместо того, чтобы принять это и изменить свое жестко запрограммированное имя, я решил, что просто найду любой файл, который Matlab использовал для кеширования этой информации, и удалил его. Google подвел меня. Я не смог найти никого, кто бы говорил об этой ошибке, не говоря уже о том, как ее исправить. Закрытие всех экземпляров Matlab на машине не помогло. Я застрял.

Работает на RHEL 6.2 с Matlab 2017a.

Как я могу убедить Матлаба позволить мне назвать новый сеанс со старым именем?

1 Ответ

0 голосов
/ 04 сентября 2018

Matlab хранит информацию о сеансе в двух местах.

Во-первых, он создает /tmp/my_session_name в качестве «доменного сокета».

Во-вторых, он создает /tmp/${USER}_edr/matlab/R2017a/transport/matlab_endpoint_lookup_${RANDOM_STUFF}. Этот каталог будет содержать pid-файл и my_session_name.epf.

Я не могу быть уверен, какие шаги абсолютно необходимы, но удаление каталога "endpoint_lookup" и файла "сокета домена" позволит Matlab повторно использовать имя сеанса. Я подозреваю, что «доменный сокет» является действительно критической частью.

Я бы старался не удалять информацию для активного сеанса. Это, вероятно, не заканчивается хорошо.

Я понял это, проверив, какие файлы записывает Matlab при запуске с новым именем сеанса. Запуск:

strace -f -o matlab.trace matlab -nojvm -nosplash -r "matlab.engine.shareEngine('another_session_name')"

Тогда я grep'ed для всего, что он писал:

grep " open(" matlab.trace | grep -v "RDONLY"

Это дало очень короткий список для расследования.

Надеюсь, это сэкономит кому-то час их времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...