2014-11-26 2 views
15

Я уверен, что это очень новый вопрос, поэтому я заранее извиняюсь. Я пытаюсь использовать ipython notebook для группового проекта. Программа, которую мы строим, довольно велика и тянет большое количество внешних наборов данных. В большинстве случаев Ipython, похоже, перестает работать. Я попытаюсь запустить ячейку или несколько ячеек, и ничего не произойдет (кроме маленькой звездочки * появится в скобках [] слева от ячейки). Даже если я попытаюсь просто добавить новую ячейку и выполнить 2 + 2, ничего не произойдет. Что здесь происходит? Как это исправить? Благодаря!Почему блоки Ipython прекращают выполнение?

+1

Вы уверены, что ядро ​​IPython не умерло? –

+0

Может быть! Как я могу это предотвратить? – user3786999

+0

Если вы находитесь в Windows, это может быть проблема с антивирусом. Известно, что Sophos вызывает именно эту проблему. – user2304916

ответ

17

Звездочка рядом с ячейкой [*] указывает, что ячейка в данный момент выполняется. Хотя IPython предоставляет каждому ноутбуку свое собственное ядро, есть только одно ядро ​​ на блокнот. Когда это ядро ​​занято выполнением кода (либо ячейки, либо серии ячеек), оно не может принимать или запускать какой-либо дополнительный код до тех пор, пока то, что он в данный момент делает, закончено. Новые исполнения сидят в очереди, пока ядро ​​не будет готово.

Если вы подождете достаточно долго после попытки выполнить 2+2, вы должны найти, что он будет в конечном итоге выполнить (при условии, что ваш основной код когда-либо выходит).

Решение этого зависит от вашего кода и от того, сколько времени вы готовы ждать, чтобы получить результаты. Как правило, попробуйте следующее:

  • использовать меньший набор данные для тестирования алгоритма, а затем масштабировать до постепенно отмечая увеличение времени. Это будет возможно с вашим полным набором данных?
  • Является ли ваш алгоритм чтения/записи на диск? Можете ли вы избежать этого или предварительно загрузить/пост-сохранить состояние?
  • Возможно ли разделение ваших данных на партии?
  • Если ваш алгоритм является пакетным, можете ли вы его распараллелить, чтобы наилучшим образом использовать ваш процессор?

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

Смежные вопросы