Python: выведите некоторые данные (matplotlib) без GIL - PullRequest
2 голосов
/ 30 апреля 2010

моя проблема, конечно, в GIL. Пока я анализирую данные, было бы неплохо представить несколько графиков между ними (чтобы не было скучно ждать результатов)

Но GIL предотвращает это (и это подводит меня к вопросу о том, был ли Python такой хорошей идеей).

Я могу только отобразить график, подождать, пока пользователь закроет его, и после этого начать вычисления. Очевидно, что это пустая трата времени.

Я уже пробовал подпроцесс и многопроцессорные модули, но не могу заставить их работать.

Есть мысли по этому поводу? Спасибо

Редактировать: Хорошо, так что это не GIL, а show ().

Ответы [ 4 ]

5 голосов
/ 30 апреля 2010

Это не проблема для matplotlib или GIL.

В matplotlib Вы можете открывать столько фигур, сколько хотите, и держать их на экране, пока ваше приложение продолжает делать другие вещи.

Вы должны использовать matplotlib в интерактивном режиме. Это, вероятно, ваша проблема.

from matplotlib import interactive
interactive(True)

это должно быть в верхней части вашего импорта

3 голосов
/ 30 апреля 2010

Я думаю, вам нужно будет поместить график в правильную систему управления окнами, а не полагаться на встроенный код показа.

Может быть, достаточно вставить .show () в другой поток?

GIL не имеет значения - у вас есть блокирующий вызов show (), поэтому вам нужно сначала обработать это.

3 голосов
/ 30 апреля 2010

Это не имеет ничего общего с GIL, просто измените код анализа, чтобы он периодически обновлял график (например, каждые N итераций).

Только тогда, если вы видите, что рисование графика слишком сильно замедляет код анализа, поместите код обновления графика в подпроцесс с многопроцессорной обработкой.

2 голосов
/ 30 апреля 2010

Кажется, что метод draw () может обойти необходимость в show ().

Единственная причина, по которой в скрипте осталась .show (), состоит в том, чтобы позволить ему выполнять блокирующую часть, чтобы изображения не исчезали, когда скрипт достигает своего конца.

...