Инициализация модулей и побочные эффекты
Python
Senior
Яндекс
Почему считается плохой практикой выполнять тяжёлую или побочную работу (создание соединений, чтение больших файлов) на уровне модуля при импорте? Как лучше организовать подобную инициализацию?
Ответы
Побочные эффекты при импорте
Импорт модулей должен быть по возможности лёгкой операцией. Тяжёлый код при импорте:
- замедляет старт приложения;
- затрудняет тестирование (мокать сложнее);
- создаёт неожиданные сайд-эффекты при любом импорте.
Лучше делать ленивую инициализацию:
- через функции `init()`;
- через ленивые синглтоны;
- в точке входа приложения (например, в `if __name__ == '__main__':`) или `startup`-хуках фреймворка.