Это странная ошибка, но она кажется воспроизводимой в разных системах.
Если у меня есть блокнот, в котором первая ячейка
%matplotlib qt
И я выбираю «Выполнить все», IPython выполняет первую ячейку, но затем зависает. Значок статуса в правом верхнем углу представляет собой открытый кружок, но я не могу запускать другие ячейки. Если я добавлю простой оператор печати после строки %matplotlib
, он будет выполнен и напечатан в зоне вывода.
Этого не произойдет, если я выполню ячейку «вручную». Как только это произойдет, я могу без проблем выбрать «Выполнить все».
Это происходит с IPyhton 2.0 как на OSX 10.6, так и на 10.8. Я использую Python 2.7 через анаконду.
Рад попробовать что-нибудь, чтобы найти это дальше ...
Я заметил похожую вещь с установкой Python 2.7 из miniconda в Windows. Когда у меня есть записная книжка, где первая ячейка:
%pylab
«Запустить все» всегда будет зависать, даже после того, как эта конкретная ячейка была запущена вручную. После этого я должен «Ядро-> Перезагрузить», чтобы ноутбук на что-нибудь ответил. Мой обходной путь - запустить эту ячейку вручную, перейти к следующей ячейке и затем «Выполнить все ниже».
Я также рад предоставить дополнительную информацию, чтобы помочь в дальнейшем отслеживании этого.
Я также могу подтвердить это (и это довольно неприятно, если у вас есть первая ячейка как с %matplotlib
и с некоторым импортом (для выполнения которого требуется некоторое время), и вы хотите выполнить его вместе со следующими ячейками).
Простой способ воспроизвести это:
%matplotlib
import time
time.sleep(10)
print "This will not print"
Таким образом, это не обязательно связано с «Выполнить все», а просто с выполнением нескольких ячеек, где в одной ячейке есть %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:
У меня редко работает обходной путь сна. Я видел, как это работает пару раз, но в большинстве случаев, когда я пробовал, ноутбук все равно зависает.
Единственный обходной путь, который у меня постоянно работает, - это:
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).
@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, которые я вызываю из записных книжек, и в этих записных книжках мне приходится запускать свою первую ячейку вручную, ждать ее завершения, а затем запускать все ниже.
Самый полезный комментарий
Проблема также возникает с магией
%gui qt
, хотя я думаю, что при некоторых обстоятельствах она пытается импортировать matplotlib, поэтому я не уверен.