Python: участок некоторые данные (MATPLOTLIB) без GIL
-
02-10-2019 - |
Вопрос
Моя проблема - это Гил, конечно. Пока я анализирую данные, было бы неплохо представить некоторые участки между между ними (так что это не слишком скучно ждать результатов)
Но GIL предотвращает это (и это приводит меня к тому, чтобы спрашивать себя, если бы Питона была такая хорошая идея в первую очередь).
Я могу отображать только сюжет, подождите, пока пользователь не закрывает его и начнут расчеты после этого. Пустая трата времени очевидно.
Я уже попробовал подпроцесс и многопроцессорные модули, но не сможете, чтобы они работали.
Любые мысли на этом? Спасибо
Редактировать: хорошо, так что это не Gil, но показать ().
Решение
Это не проблема от MatPlotlib или Gil.
В Matplotlib вы можете открыть как можно больше цифр, и у вас есть на экране, пока ваша приложение продолжает делать другие вещи.
Вы должны использовать MatPlotlib в интерактивном режиме. Это, вероятно, ваша проблема.
from matplotlib import interactive
interactive(True)
Это должно быть в верхней части вашего импорта
Другие советы
Это не имеет ничего общего с GIL, просто измените ваш код анализа, чтобы он время от времени обновлял график (например, каждый n итераций).
Только тогда, если вы увидите, что рисунок графа слишком сильно замедляет код анализа, поместите код обновления графа в подпроцесс с помощью многопроцессора.
Я думаю, вам понадобится поставить график в надлежащую систему наводвов, а не полагаться на встроенный шоу-код.
Может быть, придерживаясь .Show () в другом потоке будет достаточно?
GIL не имеет значения - у вас есть разблокировка () вызов, поэтому вам нужно справиться с этим первым.
Похоже, метод Draw () может обойти необходимость показать ().
Единственная причина, оставленная для .show () в скрипте, заключается в том, чтобы она выполняла блокирующей деталь, чтобы изображения не исчезали, когда скрипт достигает своего конца.