PyQt: заставка при загрузке тяжелых библиотек

Моему приложению PyQt, использующему matplotlib, требуется несколько секунд для загрузки в первый раз, даже на быстрой машине (второе время загрузки намного короче, поскольку библиотеки DLL хранятся в памяти Windows).

Мне интересно, можно ли показывать заставку во время загрузки библиотеки matplotlib. Где происходит фактическая загрузка - когда выполняется строка from? Если да, то как я могу заставить эту строку выполняться во время заставки и при этом иметь возможность использовать модуль во всем коде?

Связанная с этим дилемма заключается в том, как это проверить: могу ли я попросить Windows загружать библиотеки DLL для каждого выполнения, а не кэшировать их?


person Eli Bendersky    schedule 18.05.2009    source источник


Ответы (1)


Да, загрузка модуля происходит в строке, где находится оператор импорта. Если вы создадите свой QApplication и перед этим покажете свой экран-заставку, вы сможете делать то, что хотите, - также вам нужно вызывать QApplication.processEvents() всякий раз, когда вам нужно, чтобы экран-заставка обновлялся новым сообщением.

person dF.    schedule 18.05.2009
comment
Но как я могу сделать импорт видимым для кода верхнего уровня? Чтобы сделать импорт отложенным после заставки, я должен выполнить его внутри метода/функции - это вызывает проблему видимости - person Eli Bendersky; 18.05.2009
comment
@eliben: у вас должен быть первый импорт тяжелых модулей внутри функции/метода. Затем в следующий раз, когда они импортируются (с верхнего уровня других модулей), они не загружаются, а просто просматриваются в sys.modules, что очень быстро. - person dF.; 19.05.2009
comment
Как насчет импорта файлов пользовательского интерфейса, не могу заставить его работать - person Ευάγγελος Γρηγορόπουλος; 02.08.2019