Идея в чем. Когда то демонов было 10 и проблем не было.
Когда я переводил на пайтест я сделал в лоб.
Для каждого демона есть классы которые умеют его поднимать, поднимать его обвязку, настраивать конфиги натравливая демоны на обвязку, создавать ему базы, директории итд.
Так же для каждого демона тестовые данные (бд, кликхаус, что то на диске итд) должны лежать до того как он стартанет, поэтому у каждого теста есть метод prepare, и все эти методы от всех тестов вызываются до старта сессии и до запуска демонов.
Чтобы нормально дистрибьютить тесты а не тупыми пачками как это делает xdist я переписал планировщик и заставил чтобы на 1 воркере работал только 1 тест, а остальные раскидывались по мере освобождения воркеров.
Но это породило проблему, я не знал на какой воркер какой тест для какого демона придет.
Решение было очевидным, конфигурить и запускать копию каждого демона на каждом воркере со своими портами, базами и прочим и прогонять подготовку для всех тестов на каждом воркере.
Получалось, что у нас N воркеров по 10 сконфигуренных демонов на каждом и на каждом готовы тестовые данные для всех тестов, то есть куча копий, зато в любой момент любой тест прилетает на любой воркер и готов отработать. Да, потеряли на ресурсах чтобы все это было запущено одновременно и работало. Да, теряли время и ресуры на генерацию N копий данных. Зато было ахуительно распределение, которое перекрывало эти потери.
Но все хорошее когда нибудь заканчивается, демонов стало почти 30 и мы тупо упираемся в ресурсы тачки даже для 1 запуска.
Поэтому у меня возникла идея, чтобы не перепиливать логику конфигурации демонов и связку с тестами, перепилить планировщик более глобоко чем до этого. Самому решать какие демона с тестами на какой воркер должны прилететь в самом начале, далее каждый воркер поднимет только нужные демона и прогоняет подготовку только для нужных тестов. Плюс на это дело накинуть тайминги от предыдущих прогонов, чтобы добиться того самого распределения. Итого распределение должно будет быть плюс минус такое же, а ресурсов N на это в Nраз меньше.