Навигация

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 — витрины данных и запросы, главный потребитель песочницы
Открыть чат-бот