РЕДАКТИРОВАТЬ: Просто подтверждение того, можете ли вы воспроизвести это или нет, было бы полезно.Для этого требуется только один компьютер (удаленное соединение не требуется).
Обновление Кажется, другие не могут воспроизвести это на Mac или Win7, так что это специфично для WinXP или специфичнок моей машине.На данный момент я сдаюсь.
Было бы хорошо иметь учебник о том, как интерфейс и ядро взаимодействуют, чтобы мы могли отлаживать проблемы с удаленным ядром.Любые такие общие ответы (или ссылки на учебники в других местах) приветствуются.Я уже знаю о Стратегиях удаленного ядра Саша Кратки.
Теперь практический вопрос: Когда я подключаюсь к удаленной машине любым способом (например, используя удаленное ядро)стратегии), интерфейс рано или поздно замерзнет.Как я могу предотвратить это?
Вот как воспроизвести проблему на одном компьютере (удаленное соединение не требуется):
Создать новую конфигурацию ядра (меню Evaluation -> Параметры конфигурации ядра ...)
Выберите дополнительные параметры.
Аргументы для MLOpen:
-LinkName "8000@YOUR-IP-HERE,8001@YOUR-IP-HERE" -LinkMode Listen
-LinkProtocol TCPIP -LinkHost "YOUR-IP-HERE" -LinkOptions MLDontInteract
(Замените YOUR-IP-HERE
на IP-адрес вашего компьютера. В WindowsВы можете получить это, набрав ipconfig
в командном окне.)
Команда оболочки для запуска ядра: оставьте пустым (мы сделаем это вручную)
Откройтеновый ноутбук, установите ядро ноутбука на то, которое вы только что настроили, и оцените что-либо (1+1
).
Теперь нам нужно запустить ядро вручную, до истечения времени ожидания соединения,Итак, запустите новое ядро (math
) в режиме командной строки и оцените следующее:
link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *)
$ParentLink = link; (* set the front end link as parent link *)
Теперь соединение установлено, и все выглядит правильно (за исключением одного сообщения на передней панели).розовое окно сообщения конца)
Оценка Manipulate[n, {n, 0, 100, 1}]
.Во-первых, это тоже похоже на работу.Теперь поиграйте с ползунком.Рано или поздно интерфейс замерзнет и его нужно убить.Для меня перетаскивание ползунка вверх и вниз в течение ~ 10 секунд без его отпускания всегда достаточно.
Почему Front End зависает? Как я могу создать TCPIP-режим соединения между внешним интерфейсом и ядром таким образом, чтобы все работало правильно?
Некоторые примечания:
- Я на Windows XP.
- Проблема никогда не появляется, если я использую
LinkProtocol -> "SharedMemory"
. - Прерывание вычислений с использованием Evaluation -> Abort Evaluation работает правильно.
- Я подтвердил с помощью
Links[]
, что MathLink`$PreemptiveLink
и MathLink`$ServiceLink
создаются, а LinkConnectedQ[]
возвращает True
для них.
Снова обратите внимание, что интерфейсная часть будет зависать только после непрерывного перетаскивания ползунка Manipualate
в течение нескольких секунд без отпусканияit.
Ссылка на тот же вопрос в MathGroup.
Related: Настройки брандмауэра для работы удаленного ядра (Mathematica)