Ipython: "Run All" в блокноте зависает на% matplotlib qt

Созданный на 16 апр. 2014  ·  39Комментарии  ·  Источник: ipython/ipython

Это странная ошибка, но она кажется воспроизводимой в разных системах.

Если у меня есть блокнот, в котором первая ячейка

%matplotlib qt

И я выбираю «Выполнить все», IPython выполняет первую ячейку, но затем зависает. Значок статуса в правом верхнем углу представляет собой открытый кружок, но я не могу запускать другие ячейки. Если я добавлю простой оператор печати после строки %matplotlib , он будет выполнен и напечатан в зоне вывода.

Этого не произойдет, если я выполню ячейку «вручную». Как только это произойдет, я могу без проблем выбрать «Выполнить все».

Это происходит с IPyhton 2.0 как на OSX 10.6, так и на 10.8. Я использую Python 2.7 через анаконду.

Рад попробовать что-нибудь, чтобы найти это дальше ...

bug matplotlib

Самый полезный комментарий

Проблема также возникает с магией %gui qt , хотя я думаю, что при некоторых обстоятельствах она пытается импортировать matplotlib, поэтому я не уверен.

Все 39 Комментарий

Я заметил похожую вещь с установкой Python 2.7 из miniconda в Windows. Когда у меня есть записная книжка, где первая ячейка:

%pylab

«Запустить все» всегда будет зависать, даже после того, как эта конкретная ячейка была запущена вручную. После этого я должен «Ядро-> Перезагрузить», чтобы ноутбук на что-нибудь ответил. Мой обходной путь - запустить эту ячейку вручную, перейти к следующей ячейке и затем «Выполнить все ниже».

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

Я также могу подтвердить это (и это довольно неприятно, если у вас есть первая ячейка как с %matplotlib и с некоторым импортом (для выполнения которого требуется некоторое время), и вы хотите выполнить его вместе со следующими ячейками).

Простой способ воспроизвести это:

  1. Блокнот с двумя ячейками:

%matplotlib import time time.sleep(10)

print "This will not print"

  1. Выполнить оба сразу (дважды нажмите Shift-Enter)
  2. Первая ячейка будет выполнена, но затем ядро ​​зависнет (вторая ячейка не выполняется, вы не можете ничего выполнить, хотя индикатор говорит, что ядро ​​готово).

untitled

Таким образом, это не обязательно связано с «Выполнить все», а просто с выполнением нескольких ячеек, где в одной ячейке есть %matplotlib .

Последний раз тестировался с IPython 2.1, Windows 64 бит, Firefox 31

После небольшого количества экспериментов я обнаружил, что эта проблема впервые проявляется у меня в версии 2.0.0. Если я вернусь к версии 1.2.1 с

conda install ipython=1.2.1

проблема уходит.

32-разрядная версия Windows, Python 2.7.7, Firefox 31

Я также столкнулся с этой ошибкой и могу воспроизвести с помощью вышеуказанного метода с помощью Python 3.4.1, Anaconda 2.1.0 (64-разрядная версия) в Windows 8, IPython 2.3.1.
Это довольно неприятная ошибка. Могу ли я что-нибудь сделать, чтобы его отследить? Когда, как ожидается, будет завершена (примерно) веха 4.0?

Я подтверждаю ошибку, используя последнюю версию ipython из github (e2778c5f4047d03f5f025bd53d1704a0cf9f0337) в Linux Mint 17, python 3.4 и matplotlib 1.4.0.

Есть новости об этом, ребята? При необходимости я могу провести дополнительное тестирование. Этот баг реально напрягает !!!

Я могу подтвердить, что это происходит и со мной, происходит постоянно на CentOS с python 2.7 и matplotlib 1.4.4.

А работает, если запустить ячейку вручную?

См. Мой комментарий выше (https://github.com/ipython/ipython/issues/5629#issuecomment-50603511), он также появляется, если вы запускаете несколько ячеек вручную

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

^ это тоже то, что я наблюдал.

Проверено в Ipython Notebook 3.1.0. Обходной путь:

import time
%matplotlib
time.sleep(1)

Ужасно, но слишком неприятно отказываться от возможности запустить все.

Я получил это, чтобы работать на моей машине.

Пт, 12 июня 2015 г., в 7:02, quicknir [email protected] написал:

Проверено в Ipython Notebook 3.1.0. Обходной путь:

время импорта
% matplotlib
время сна (1)

Ужасно, но слишком неприятно отказываться от возможности запустить все.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/ipython/ipython/issues/5629#issuecomment -111502934.

можем ли мы получить эту веху для 4.1 (или 5.0)?
Вешать тетради звучит (для меня) немного более сурово, чем нужно для вехи в списке желаний. Также эта ошибка раздражает при использовании matplotlib (несмотря на обходной путь).

Должны ли мы просто использовать sleep(1) в самой магии matplotlib в качестве обходного пути, пока мы не выясним, почему ??

: +1:

У меня редко работает обходной путь сна. Я видел, как это работает пару раз, но в большинстве случаев, когда я пробовал, ноутбук все равно зависает.

Единственный обходной путь, который у меня постоянно работает, - это:

  1. Вручную запустите ячейку, содержащую% matplotlib
  2. Дождитесь индикации простоя ядра
  3. выберите следующую ячейку
  4. "Беги ниже"

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

Я сделал блокнот со следующими тремя ячейками:

import time
%matplotlib qt
time.sleep(1)
with open("test_log.txt", "a") as fid:
    fid.write("it worked\n")

затем в оболочке запускалось:

for i in {1..100}; do
    ipython nbconvert --execute test_qt.ipynb  --inplace;
done
wc -l test_log.txt

Возможно, этот тест использует неправильный код, но, похоже, он работает нормально.

Помечено как 4.1, поэтому мы смотрим на это.

Спасибо.
Я только что попробовал воспроизвести @mwaskom и получил те же результаты. Однако затем я вырвал код времени и сна и снова запустил оболочку, и она _также_ сработала! Таким образом, это не кажется хорошей процедурой воспроизведения (или внутренним обходным путем). : - /
Я также обнаружил, как и @tanderl , что обходной путь сна не всегда работает для меня. Это на ipython 3.2.1 на 64-битной Ubuntu. Завтра я могу попробовать то же самое в Windows.

В Windows 8.1 с использованием Ipython 3.2.0, установленного через Anaconda, я также обнаружил, что обходной путь сна не работает для меня, то есть с sleep(1) (или даже большими значениями) в той же ячейке, что и волшебство matplotlib, Run Все на недавно перезапущенном ядре все равно будет зависать (или ничего не делать, пользовательский интерфейс все еще работает) со звездочкой в ​​следующей ячейке. Запуск ячеек вручную по очереди с промежуточным ожиданием по-прежнему работает.

Я подтверждаю то, что сказал @bilderbuchi, с обновленными стеками анаконды на Linux Mint.

Привет,
Я только что столкнулся с похожей проблемой. При запуске записных книжек, которые используют встроенный% matplotlib или магию записной книжки, "запустить все ячейки" иногда зависает, и мне приходится запускать все ячейки вручную.
Я использую Windows 7, Python 3.5, IPython 5.1.0, notebook 4.1.0 и matplotlib 1.5.3.
В качестве обходного пути я очищаю все выходы, и тогда кажется, что это работает. К сожалению, я не могу предоставить воспроизводимый блокнот (подойдет, если я столкнусь с этим в будущем).

С наилучшими пожеланиями,
Флориан

Это все еще не решено как в ноутбуке, так и в лаборатории jupyter.

@thomasaarholt есть ли у вас надежная процедура воспроизведения?

@bilderbuchi см. исходный пост в этом выпуске, это все та же проблема. Вот гифка, на которой я воссоздаю это на своей машине (OSX с последними версиями jupyter и qt4).

bug

@Carreau , достаточно ли этого воспроизведения для работы? Должен ли зависший баг быть более срочным, чем "список желаний"?

@bilderbuchi @Carreau , я только что заметил тег списка желаний.
Я хочу заявить, что эта ошибка должна иметь гораздо более высокий приоритет:

Многие новые пользователи jupyter научатся использовать jupyter на уже существующих ноутбуках. Например, они пытаются запустить пример книги, предоставленной каким-либо плагином. При текущем поведении пользователи, использующие команду «Выполнить все» или «Shift + Enter», быстро просматривая записную книжку, обнаружат, что записная книжка зависает с самого первого момента, и это производит очень плохое первое впечатление. Такое впечатление часто может действительно подчеркнуть, насколько «сложное кодирование» для того, кто изучает кодирование впервые, или для кого-то, у кого в прошлом был плохой опыт (класс / экзамен).

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

Что ж, это уже не вопрос приоритета, ошибка обнаружена уже более двух лет, и проблема в том, что никто не может ее понять. Мы действительно пытались понять это, но это кажется неуловимым исправлением, и мы не можем быть экспертами по всем фреймворкам и библиотекам. Мы были бы счастливы сделать что-нибудь, но проблема существует так долго, что присвоение ей более высокого приоритета не поможет. Никто из разработчиков не знает, что происходит. В противном случае мы бы это исправили.

@Carreau Можете указать мне, где в коде ipython должна происходить интеграция между сервером ядра и графическим интерфейсом?

Есть ли способ программно открыть записную книжку в браузере и запустить все ячейки? Это, вероятно, позволит нам git разделить код пополам, чтобы определить, какое изменение вызывает это.
Я попытался запустить вредоносный блокнот через nbconvert --execute с терминала и из сеанса IPython, но пока не мог заставить его зависнуть.

@bilderbuchi Во- первых, можете ли вы воспроизвести ошибку "вручную" на своей машине?

Да. Я обнаружил интересное поведение, пробуя разные варианты магии.
Содержимое первой ячейки:

%matplotlib notebook -> works
%matplotlib inline -> works
%matplotlib -> prints Using matplotlib backend: Qt5Agg, then hangs
%matplotlib qt -> prints ModuleNotFoundError: No module named 'PyQt4' (I think that's a different unrelated bug)
%matplotlib qt5 -> prints nothing, then hangs

(Другая ошибка при выполнении %matplotlib qt - это ContinuumIO / anaconda-issues # 1068, я думаю.)
Во второй ячейке есть только

print("This will not print")

Если я сказал выше «зависает», я имею в виду, что во второй ячейке всегда стоит звездочка вместо «2», и сообщение никогда не печатается.
Все это было выполнено с помощью Kernel - Restart & Run All, чтобы обеспечить чистый лист. Это на Python 3.6.1 через Anaconda в Windows 10, IPython 5.3.0, Firefox 52.0.2.

Не могли бы вы указать мне, где в коде ipython должна происходить интеграция между сервером ядра и графическим интерфейсом пользователя?

Здесь есть описание того, как должна работать интеграция цикла событий: http://ipython.readthedocs.io/en/stable/config/eventloops.html#event -loops-in-the-kernel.

И код для цикла событий Qt 5 начинается здесь: https://github.com/ipython/ipykernel/blob/20426cdad71820642dc69b95c30565d155521509/ipykernel/eventloops.py#L89

Просто чтобы проверить - проблема определенно связана с частью "matplotlib" в %matplotlib а не с магией в целом? На всякий случай, если другие магии требуют меньше времени для запуска, и поэтому ошибка менее заметна.

Проблема также возникает с магией %gui qt , хотя я думаю, что при некоторых обстоятельствах она пытается импортировать matplotlib, поэтому я не уверен.

Это не имеет (напрямую) ничего общего с matplotlib или магией. Это почти наверняка состояние гонки при переходе от одного цикла событий к другому.

Я предполагаю, что здесь необходимо аналогичное исправление для https://github.com/ipython/ipython/pull/10301/files .

Я столкнулся с подобной проблемой после обновления Spyder.

Я могу подтвердить, что это все еще происходит, с помощью% gui qt. У меня есть куча материалов Qt, которые я вызываю из записных книжек, и в этих записных книжках мне приходится запускать свою первую ячейку вручную, ждать ее завершения, а затем запускать все ниже.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги