Общая идея хороша, но сеанс Python / GUI может не быть таким уж отзывчивым, пока фоновый поток уходит import
; к сожалению, import
неотъемлемо и неизбежно существенно «блокирует» Python (это не только GIL, есть специальная дополнительная блокировка для импорта).
Все еще стоит попробовать, поскольку может сделать вещи немного лучше - это также очень просто, поскольку Queue
s по своей природе поточно-ориентированы и, кроме Queue
s put
и get
, все, что вам нужно, это в основном __import__
. Тем не менее, не удивляйтесь, если это не поможет, и вам по-прежнему нужна дополнительная поддержка.
Если у вас есть какой-то накопитель, который по своей природе очень быстрый, но с ограниченным пространством, например, «RAM-накопитель» или особенно твердотельный твердотельный накопитель, возможно, стоит сохранить необходимые пакеты в .tar.bz2
(или другом в виде архива) и распаковывает его на быстрый диск при запуске программы (по сути, это просто ввод-вывод, поэтому не будет плохо блокировать вещи - операции ввода-вывода быстро освобождают GIL - и также особенно легко делегировать подпроцесс, выполняющий tar xjf
или тому подобное).
Если некоторая медлительность импорта вызвана огромным количеством .py/.pyc/.pyo
файлов, стоит попробовать сохранить их (только в .pyc
форме , , а не как .py
) в zip-файле и импортировании оттуда (но это только помогает с накладными расходами ввода-вывода, в зависимости от вашей ОС, файловой системы и диска: не помогает с задержками из-за загрузки огромных DLL или выполнения код инициализации в пакетах во время загрузки, что, как я подозреваю, является более вероятной причиной медлительности).
Вы могли бы также рассмотреть возможность разделения приложения на multiprocessing
- снова используя Очереди (но многопроцессорного типа) для связи - так, чтобы импорт и некоторые тяжелые вычисления делегировались нескольким вспомогательным процессам и, таким образом, делались асинхронными (это также может помочь в полной мере использовать несколько ядер одновременно). Я подозреваю, что это, к сожалению, может быть трудно организовать должным образом для задач визуализации (например, тех, которые вы, вероятно, выполняете с помощью Mayavi), но это может помочь, если у вас также есть некоторые пакеты и задачи «чисто тяжелых вычислений».