Подтвердить что ты не робот

Windows: медленный запуск приложения

У меня есть приложение, написанное на Python и скомпилированное с PyInstaller. Он также использует PyQt для инфраструктуры графического интерфейса.

Запуск этого приложения имеет задержку около 10 секунд до того, как основное окно загрузится и будет показано. Насколько я могу судить, это не из-за медлительности моего кода. Вместо этого я подозреваю, что это связано с инициализацией среды исполнения Python.

Проблема заключается в том, что это приложение запускается с помощью приложения laucncher/taskbar. Пользователь запустит эту кнопку, чтобы запустить приложение, увидеть, как ничего не происходит, и щелкнуть в другом месте в другом приложении. Когда мое приложение показывает это окно, оно не может выходить на передний план из-за правил для SetForegroundWindow.

У меня есть доступ к источнику для загрузчика win32 PyInstaller, кода Python и даже кода запуска.

Мои вопросы:

  • Как запустить приложение быстрее?

  • Как я могу измерить время, затрачиваемое на первые несколько секунд жизни процесса?

  • Какова общепринятая методика сокращения времени до отображения первого окна?

Я бы не хотел добавлять всплеск по двум причинам: один, я думаю, что это не поможет (накладные расходы до запуска кода Python) и два, мне просто не нравятся заставки:)

Если мне нужно, я мог бы, вероятно, отредактировать заглушку загрузчика PyInstaller, чтобы создать окно, но этот другой маршрут я бы скорее не взял.

Спасибо за предложения.

4b9b3361

Ответ 1

У меня есть "скомпилированные" несколько приложений wxPython с использованием py2exe и cx_Freeze, ни один из них не займет больше 4 секунд.

  • Вы уверены, что это не ваш код? может быть, какая-то сеть или какой-то вызов ресурса ввода-вывода удерживают ваше приложение?
  • Вы пробовали другую машину, чем ваша? Даже самое быстрое аппаратное обеспечение иногда может быть медленным с неправильной конфигурацией программного обеспечения, приложениями или ОС, попробуйте.
  • Попробуйте синхронизировать его с модулем timeit.

Я никогда не использовал pyQT, но с wxPython скорость запуска в порядке, и после первой инициализации, если я снова закрываю и открываю, это происходит быстрее, чем в первый раз.

Ответ 2

Сообщите PyInstaller создать исполняемый файл в режиме консоли. Это дает вам рабочую консоль, которую вы можете использовать для отладки.

В верхней части основного script, даже до запуска первого импорта, добавьте печать "Начало кода Python". Затем запустите пакетный исполняемый файл из командной строки. Таким образом, вы можете получить четкое представление о том, потрачено ли время на загрузчик PyInstaller или в ваше приложение.

Загрузочный загрузчик PyInstaller обычно довольно быстр в режиме с одним режимом, но он может быть намного медленнее в режиме с одним файлом, потому что он депонирует все во временный каталог. В Windows I/O работает очень медленно, а затем у вас есть антивирусы, которые захотят дважды проверить все эти DLL файлы.

PyQt сам по себе не является проблемой. PyQt генерируется SIP, который генерирует очень быстрые ленивые привязки; Импорт всего PyQt быстрее, чем любая другая графическая библиотека, потому что в основном ничего не делает: все привязки к классам/функциям динамически создаются, когда (и если!) вы получаете к ним доступ, экономя много памяти.

Если ваше приложение работает медленно, это будет верно и без PyInstaller. В этом случае единственным решением будет либо заставка (импортировать только PyQt, создать QApplication, создать экран заставки, затем импортировать остальную часть вашей программы и запустить его), либо переработать код. Я не могу вам помочь без подробностей.

Ответ 3

Я подозреваю, что вы используете режим pyinstaller "один файл" - этот режим означает, что он должен распаковать все библиотеки во временную директорию, прежде чем приложение сможет запустить. В случае Qt эти библиотеки достаточно велики и занимают несколько секунд для распаковки. Попробуйте использовать режим "один каталог" и посмотрите, помогает ли это?

Ответ 4

Я согласен с приведенными выше ответами. Программе Qt python понадобилось около 5 секунд для запуска на приличном ПК при использовании режима одного файла. После того, как я перейду на --oneir, для начала потребуется всего одна секунда; почти сразу после того, как пользователь дважды нажимает на exe файл. Но недостатком является то, что в этом каталоге есть много файлов, которые не так аккуратны.