MOD-PYEXEC — Песочница Python для аналитики
Лицензия: Бесплатный
Вычислительное плечо аналитики: модуль исполняет присланный фрагмент Python над присланной таблицей и возвращает таблицу или фигуру Plotly. Всё, чего не выражает язык формул — нестандартная подготовка данных, статистика, прогноз, кластеризация, — считается здесь.
Как это устроено
- Каждый запуск — отдельный процесс, а не поток. Чужой код нельзя ни прервать, ни ограничить изнутри собственного процесса, поэтому его выносят наружу.
- Лимиты процессорного времени и памяти ставятся процессу до исполнения кода, а не проверяются по договорённости. По истечении времени процесс убивается вместе со всеми, кого успел породить.
- Сети нет: контейнер стоит во внутренней сети без выхода наружу, а запрещённые модули (
socket,requests,urllib,subprocessи другие) отвергаются в самом коде — чтобы отказ был внятным, а не зависанием на таймауте соединения. - Файловой системы хоста тоже нет: рабочий каталог создаётся на каждый запуск в памяти и удаляется после.
- Ошибка синтаксиса, исключение, таймаут, нехватка памяти и попытка выйти в сеть — разные сообщения с классом ошибки. «Код возврата 1» пользователю не показывается никогда: он не говорит ни что случилось, ни что делать.
Что доступно внутри
Входная таблица приезжает как pandas.DataFrame в переменной df (и теми же данными — списками columns и rows). Результат код кладёт в result — это DataFrame, Series, скаляр или словарь {columns, rows}; для графика — в fig фигуру Plotly.
Состав библиотек: pandas, numpy, scipy, statsmodels, scikit-learn, openpyxl, plotly. Отдельный инструмент возвращает список с фактическими версиями живого интерпретатора — чтобы автор кода не гадал о составе образа и не переписывал расчёт после отказа импорта.
Настройки модуля
| Настройка | Назначение |
|---|---|
| Время расчёта по умолчанию / предельное | Сколько живёт процесс и до какого потолка срезается запрошенное время |
| Память по умолчанию / предельная | Предел адресного пространства процесса-исполнителя |
| Процессорное время по умолчанию / предельное | Предел процессорного времени — считает работу процессора, а не ожидание |
| Строк во входной таблице | Таблица крупнее отвергается до запуска процесса |
| Строк в результате | Результат длиннее обрезается с признаком усечения |
Запрошенные вызовом лимиты срезаются до потолков, а не отвергаются: аналитик, попросивший «побольше», получает расчёт, а не отказ.
Честные следствия
- Журнал запусков хранит метрики и класс ошибки, но не сам код и не данные.
- Без интерпретатора в образе модуль честно отвечает «не готов» и называет причину, а не притворяется исправным.
Связанные модули
- MOD-ANALYTICS — витрины данных и запросы, главный потребитель песочницы