Ipython: Невозможно прервать бесконечные циклы в записной книжке

Созданный на 13 янв. 2013  ·  29Комментарии  ·  Источник: ipython/ipython

Недавно я представил введение в программирование на Python на семинаре по геномике. Для урока мы использовали интерфейс ноутбука, и он был очень хорошо принят (спасибо!). Во время обсуждения циклов я попросил студентов преобразовать пример цикла for в цикл while. В процессе многие студенты создавали бесконечные циклы. У некоторых из этих студентов это привело к сбою Firefox. Исправление заключалось в том, чтобы убить сервер ноутбука и браузер. Все студенты использовали виртуальные машины на базе Ubuntu и Firefox в качестве браузера. Если это поможет, я могу получить дополнительную информацию о системах, а также выяснить, смогу ли я воссоздать это поведение на своей копии виртуальной машины.

needs-info

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

Я думаю, что одному из нас нужно найти простой ноутбук, который воспроизводит эту проблему, по крайней мере, в какой-то системе.

while True:
    print "foo"

Это заставляет Firefox использовать 100% ЦП и не отвечает ни в какой форме. Уничтожение Firefox и процесса IPython — единственный способ вернуть систему.

Айпитон 3.0.0
Фаерфокс 42.0
Linux 3.13.0-24-общий

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

Будет ли случайно сбой производить вывод, а не тот, который не приводит к сбою браузера?
(у вас должно быть kill kernel в одном меню)

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

Я думаю, что здесь есть две проблемы:

  • Прерывание бесконечного цикла вполне возможно. В меню «Ядро» нажмите «Прерывание».
  • Если ваш цикл печатает что-то на каждом шаге, он будет выдавать огромное количество вывода, что может вызвать проблемы для браузера. См. также выпуск №1975.

@Carreau не было выхода

@takluyver меню ядра не отвечало. Это могло случиться с петлями, которые печатались, и петлями, которые не печатались.

Можете ли вы привести пример цикла, где он не работает?

13 января 2013 г., 16:11, Дэниел Макдональд ( [email protected] ) написал:

@Carreau https://github.com/Carreau вывода не было

@takluyver https://github.com/takluyver меню ядра не было
отзывчивый. Это могло случиться с петлями, которые печатались, и петлями, которые
не печатались.


Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12195606.

Наивный/ужасный алгоритм анаграммы, когда слова не являются анаграммами друг друга

from random import shuffle 
word1 = list("quietx")
word2 = list("quite")
while word1 != word2:
    shuffle(word1)

Я только что проверил, и я могу без проблем прервать его в Firefox и Ubuntu. Можете ли вы надежно воспроизвести его в своей системе?

Я не могу воспроизвести это в своей системе. Я отследю пользователей, у которых возникла проблема, и перезапущу их на их системах. Семинары возобновятся завтра утром — семинар проходит в Европе, а сегодня выходной — так что пройдет немного времени, прежде чем я смогу вернуться к этому.

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

Еще раз спасибо за быстрый ответ, и я извиняюсь за то, что потратил время на это

В воскресенье, 13 января 2013 г., в 9:57, Томас Клюйвер, [email protected] , написал:

Я только что проверил, и я могу без проблем прервать его в Firefox.
и Убунту. Можете ли вы надежно воспроизвести его в своей системе?


Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12196271.

Не беспокойся. Не стесняйтесь снова открывать, если вы найдете способ воспроизвести ошибку.

Я постоянно получаю это в блокноте IPython в Chrome (и я только что проверил его в Firefox, и он «успешен», т.е. он разбился). Я _думаю_, это происходит каждый раз, когда у меня есть бесконечный цикл, который часто печатает. Для меня это проблема, потому что я часто добавляю операторы печати для отладки, и при этом я теряю код, который должен был исправить мою ошибку из-за сбоя.

Вот код, который я использовал, чтобы заставить его падать:

импортировать numpy как np
х = np.массив ([0,1,2,3,4])
это = np.nditer(x,flags=['f_index'])
пока не то.закончено:
распечатать.индекс

такое бывает и у меня...
Сначала браузер перестает отвечать на запросы, а потом я обнаруживаю, что вся система зависает. Я вынужден сделать хард-ресет.
Я использую Ubuntu с рабочим столом xfce/firefox.
Если это будет полезно, я был бы готов поделиться любыми другими деталями, которые могут вам потребоваться, чтобы исправить это ...
@минк

Эта проблема, кажется, все еще существует!

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

Даже если я перезагружу компьютер, после того, как я снова нажму на блокнот, он будет зацикливаться там навсегда!

Я использую MacBook с установленным ipython 2.2.0.

У меня также была эта проблема: ноутбук ipython зависал в браузере и не мог восстановиться с помощью ядра прерывания. В дополнение к ошибкам зацикливания это, по-видимому, происходит с любым зависшим процессом, например, если интернет-запрос в функции зависает по сетевым причинам.

Мой вопрос: есть ли способ получить доступ к базовому ядру из командной строки? Я запускаю ноутбук ipython с терминала, и на данный момент мое решение состоит в том, чтобы прерывать работу этого терминала с помощью клавиатуры, что полностью отключает ядро.

У меня тоже есть такая критическая проблема. Кажется, это действительно связано с петлями. Это не позволяет мне запускать длительные симуляции или анализ данных, а это значит: я облажался...

Я не знаю, связано ли это, но я заметил, что, как только он зависает, гиперпоточность, кажется, рушится на один процессор, который все еще работает. Вы можете увидеть это, например, с помощью htop . Сначала мне казалось, что гиперпоточность (которую библиотеки numpy -> BLAS используют на моей машине) была той, что дает сбой, и тогда все это будет работать безумно медленно, но затем я попытался прервать и не повезло, и поэтому я понял, что это просто застряло ядро ​​IPython.

Эта проблема никогда не возникала у меня, когда:

  • Я использовал более старую машину (но все еще очень похожую, только меньше оперативной памяти и процессоров).
  • Я использовал старый ipython<3.0
  • Я не работал на удаленном ноутбуке IPython

Мои обоснованные предположения таковы:

  • проблема с каким-то сокетом где-то...
  • Бэкэнды matplotlib threading испортились <-- но это только потому, что они почти всегда делают так, что лучше сделать ставку;)

Когда возникает проблема, я просто перезапускаю ядро ​​​​из веб-интерфейса и повторяю то, что делал...

РЕДАКТИРОВАТЬ: мне также трудно воспроизвести это, но я заметил, что если я не использую BLAS, например, если я не использую точечный продукт numpy, проблема не появляется, хотя я должен запустить еще несколько тестов чтобы убедиться в этом.

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

У меня также есть эта проблема на OSX + Chrome.

@minrk , я думаю, что это стоит открыть снова. У меня недостаточно привилегий, чтобы просто открыть заново, если не создавать новую проблему.

Из интерфейса командной строки кажется, что нажатие кнопки «Стоп» что-то делает, но ноутбук совершенно не отвечает.

[I 15:26:22.224 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:32.197 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:42.688 NotebookApp] Saving file at /Untitled.ipynb
[I 15:27:30.993 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:27:35.605 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:28:43.999 NotebookApp] Saving file at /Untitled.ipynb
[I 15:29:28.038 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee

Я думаю, что одному из нас нужно найти простой ноутбук, который воспроизводит эту проблему, по крайней мере, в какой-то системе. В противном случае, скорее всего, это не поправимо.

Я тоже вижу эту проблему.

Я думаю, что одному из нас нужно найти простой ноутбук, который воспроизводит эту проблему, по крайней мере, в какой-то системе.

while True:
    print "foo"

Это заставляет Firefox использовать 100% ЦП и не отвечает ни в какой форме. Уничтожение Firefox и процесса IPython — единственный способ вернуть систему.

Айпитон 3.0.0
Фаерфокс 42.0
Linux 3.13.0-24-общий

Я могу воспроизвести с
ипитон 3.2.0
питон 2.7.10
Версия Chrome 46.0.2490.86 (64-разрядная версия)
ОС X 10.10.5

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

Мое первоначальное впечатление, что это проблема с механизмом рендеринга текста в Chrome, но я мало знаю, как это работает.

Другой пример медлительности — это когда относительно большая библиотека matplotlib выходит на передний план после прокрутки до нее. Весь ноутбук становится чрезвычайно дрожащим в течение добрых 4-5 секунд.

Что бы это ни стоило, я использую довольно мощную машину, поэтому особенно странно, что jupyter может поставить всю мою машину на колени.

9/10, это происходит случайно, так что это не так просто, как назвать это ошибкой пользователя.

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

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

У меня была та же проблема сегодня и в прошлом, когда я работал с Linux Mint (18.0) и firefox. Это был очень простой генератор count(), но я возился с __getitem__ и по глупости установил печать на ключе.

В последних версиях наших пакетов реализовано регулирование вывода, что должно смягчить проблемы с большим объемом вывода, замедляющим работу браузера.

Закрытие, поскольку эта проблема не в самом IPython, и если она все еще проблематична и актуальна, ее следует открыть в правильном репозитории. Это позволит держать под контролем количество открытых задач в репозитории IPython.

Не стесняйтесь оставлять комментарии или открывать заново, если это необходимо.

Спасибо.

@Carreau , у вас есть рекомендуемый репозиторий (или он просто не был перенесен туда, где отслеживаются проблемы с ноутбуком ...)?

Это необходимо будет перенести либо на jupyter/notebook, либо на jupyterlab/jupyterlab. Вероятно, второй, если он также влияет на jupyterlab.

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