Динамическая подмена питон-скриптов для источника данных сelesta

Материал из Course Orchestra
Перейти к: навигация, поиск

При использовании источника данных celesta, при изменения питон-исходников (скриптов python) новые версии скриптов подхватываются "на лету". Теперь достаточно сохранить на диск новую версию питон-скрипта и автоматически питон-интерпретаторы Челесты будут перезагружать модули, чтобы использовать новую версию кода. Перестартовывать Showcase не нужно, жать на кнопку "сброс пула интерпретаторов celesta" не нужно (в последующих релизах данная кнопка будет удалена)!

Данный функционал работает для включенных в гранулы питоновских модулей с логикой (исключая _orm.py-файлы). Периодически (раз в 10 секунд) Челеста отслеживает изменения исходников по "дате последней модификации файлов-скриптов" на диске. Перед каждым запуском Челеста функции, в случае обнаружения изменений в celesta-скриптах производится реинициализация jython - интерпретатора.

Обратите внимание! Никакой гарантии, что при динамической перезагрузке интерпретаторов не будет утечки памяти. Например, любой разработчик решения может элементарно устроить утечку памяти (достаточно записать ссылку на свой модуль в любой словарь любого библиотечного модуля, который не перезагружается). Поэтому периодический рестарт системы после внесения изменений в скрипты всё равно необходим (это нужно периодически делать в качестве профилактики).

Список файлов, где отслеживаются изменения "на лету", создаётся в момент чтения челеста-гранул при запуске Showcase. Поэтому добавление и удаление файлов, а также целых пакетов полностью корректно не отрабатывается (точнее так: добавление отработается, но добавление и последующее изменение -- уже нет).

Таким образом для источников данных celesta параметр jython.getStateMethod.isNew теперь игнорируется, а кнопка "Сбросить пул Jython интерпретаторов в Celesta" на странице "Управление ресурсами Showcase" (localhost:8080/Showcase/control/memory.jsp) удалена и дальнейшее ее использование невозможно.

Данный функционал призван упростить разработку решений и обновление систем "на лету".