isp-python-wrapper-kit — это библиотека, которая:
- Запускает Python-модуль как дочерний процесс из Go
- Передаёт ему
json(config.json) конфигурацию через файл и env-переменные (BINDING_ADDRESSиCONFIG_FILE) - Перезапускает Python-процесс при изменении конфигурации
- Интегрируется с инфраструктурой
- Управляет жизненным циклом Python-сервиса как частью Go-приложения
Python-процесс управляется компонентом PySupervisor и существует в рамках жизненного цикла Go-приложения.
Основные состояния:
- Idle (ожидание конфигурации)
- Starting (запуск процесса) - запуск через
uv run - Running (процесс работает)
- Restarting (перезапуск при получении нового конфига) - выключение дочернего процесса и повторный запуск
- Stopping (остановка) - передача дочернему процессу сигнала
SIGTERMс таймаутом 5s, если за это время процесс не останавливается, вызываетсяkillдочернего процесса - Stopped (завершён)
main.py,pyproject.tomlиuv.lockдолжны находиться в корне проекта- Для получения адресов
requiredсервисов необходимо, чтобы сервис на питоне реализовывал методPOST /receive_module_addressesи принимал тела вида:
{
"module": "<moduleName>",
"hosts": ["<host:port>","<host:port>"],
}- В директории
confдолжны лежатьconfig.ymlиdefault_remote_config.json
package main
import (
"my-module/conf"
wrapperkit "gitlab.txix.ru/isp/isp-python-wrapper-kit"
)
func main() {
wrapperKit.Main[conf.Remote](conf.Remote{}, nil, nil)
}package main
import (
"my-module/conf"
"my-module/routes"
wrapperkit "gitlab.txix.ru/isp/isp-python-wrapper-kit"
)
func main() {
wrapperKit.Main[conf.Remote](conf.Remote{}, routes.EndpointDescriptors(), nil)
}package main
import (
"my-module/conf"
wrapperkit "gitlab.txix.ru/isp/isp-python-wrapper-kit"
)
func main() {
wrapperKit.Main[conf.Remote](conf.Remote{}, nil, []string{"<required-module-name1>","<required-module-name2>"})
}