Ipython: Mencegah kernel mengirim terlalu banyak output ke frontend notebook

Dibuat pada 22 Okt 2014  ·  19Komentar  ·  Sumber: ipython/ipython

Karena kasus PEBKAC kami membuat buku catatan besar (4,6 MB) dengan banyak cetakan yang tidak dapat dimuat lagi di Safari dan Firefox. Safari sama sekali tidak kembali kepada saya, Firefox setelah beberapa saat memberi tahu saya bahwa skrip tidak merespons. Chrome pada akhirnya dapat memuatnya, sehingga saya dapat menggunakan fungsi keluaran yang jelas untuk menghilangkan megabyte teks.
Jadi, saya tidak terlalu membutuhkan bantuan lagi, tetapi saya berpikir bahwa Anda mungkin tertarik untuk melihat skrip ini dalam bentuk rusak untuk melihat apakah ada yang dapat dilakukan agar notebook melindungi diri dari kebodohan semacam itu.
Saya mengunggah skrip yang rusak di sini: https://gist.github.com/8be664570dd2100310d6

bug notebook

Komentar yang paling membantu

Akan sangat bagus jika IPython dapat melakukan beberapa hal untuk membantu ini:

  • "Program Anda menghasilkan output dalam jumlah besar; terus berjalan?"
  • Memuat notebook: "Notebook ini berisi banyak keluaran; Hapus sel keluaran atau Muat secara normal?"

Semua 19 komentar

Terima kasih, kami akan memeriksanya.

cf https://github.com/ipython/ipython/issues/6516 untuk ekstensi anti while True loop , Anda juga dapat menjalankan output yang jelas dari baris perintah nbconvert dan melakukan ipynb -> ipynb jika terjadi lagi.

Akan sangat bagus jika IPython dapat melakukan beberapa hal untuk membantu ini:

  • "Program Anda menghasilkan output dalam jumlah besar; terus berjalan?"
  • Memuat notebook: "Notebook ini berisi banyak keluaran; Hapus sel keluaran atau Muat secara normal?"

@Carreau Saya pikir ini harus ada di FAQ! Dengan panda, sangat mudah untuk secara tidak sengaja membuat plot lebih dari 200 kolom dengan 130.000 titik data ... dan jika plot itu sejajar, browser akan 'meranggas'. ;)

Hm, nbconvert --to= opsi tidak menyebutkan .ipynb sebagai keluaran potensial dan hanya menggunakannya dengan --to=ipynb gagal.

nbconvert --help-all ekstrak:

--to=<CaselessStrEnum> (NbConvertApp.export_format)
    Default: 'html'
    Choices: ['custom', 'html', 'latex', 'markdown', 'notebook', 'pdf', 'python', 'rst', 'slides']

Saya kira maksud Anda notebook ? Haruskah kita membuat alias ipynb menjadi notebook ?

Saya sering melihat ini dengan siswa saya (dan saya). Cara memecahkan ipython dalam 13 karakter:

def f():
    f()
f()

1000 daftar tumpukan membuat buku catatan beku di Chrome. Tetapi kemudian seseorang tidak dapat membuka buku catatan baru untuk menjalankan perintah konversi tersebut, karena dasbor dan buku catatan terkunci ... 5 menit kemudian ... dilepaskan! Sekarang saya mencoba untuk menghapus keluaran dari sel ... 5 menit lagi ... bahkan menutup tab notebook tidak membantu.

Versi apa Saya memiliki 2.3.1 rilis resmi terakhir dan memiliki ini:

--to=<CaselessStrEnum> (NbConvertApp.export_format)
    Default: 'html'
    Choices: ['custom', 'html', 'latex', 'markdown', 'python', 'rst', 'slides']
    The export format to be used.

Saya menggunakan ipython nbconvert , apakah ada aplikasi tambahan ??

2.x tidak dapat melakukan ipynb ke ipynb

Saya pikir masalah utama di sini adalah waktu yang dibutuhkan untuk membuat input dalam jumlah besar di browser (meskipun perlu beberapa waktu untuk mentransfer 4,6 MB dari kernel ke browser). Masalah lain di sini menunjukkan bahwa perubahan CSS yang diusulkan dapat membantu masalah ini.

Pada titik terkait, menampilkan traceback yang memiliki lebih dari, katakanlah 20, pemanggilan fungsi di pelacakan tumpukan tidak berguna. Pertimbangkan untuk memiliki objek hierarki bentangkan / ciutkan yang bisa digunakan stacktrace. Atau mungkin untuk keluaran yang besar harus ada tautan "Tampilkan lebih banyak ..." untuk memastikan bahwa notebook dapat merender. (Keluaran besar tampaknya tidak menjadi masalah di nbviewer statis. Saya tidak sengaja mencetak buku catatan siswa yang dirender nbviewer 500 halaman dengan stacktrace beberapa hari yang lalu ...)

Masalah output besar yang membuat notebook dapat dibongkar dapat terjadi di kernel Jupyter mana pun, jadi tidak terbatas hanya pada IPython.

Saya menjalankan kernel secara lokal jadi saya berharap transfer data 4,6MB tidak membutuhkan waktu lama.
Firasat saya adalah bahwa ada biaya tetap yang besar untuk menafsirkan / merender salah satu baris stdout tersebut. yaitu berapa waktu untuk membuat 1 standar keluar dengan garis K vs keluaran standar K dengan masing-masing 1 baris.

Kami telah berbicara sebelumnya tentang memasang beberapa pelindung yang aman untuk mencegah output dalam jumlah besar bahkan mencapai frontend notebook (atau lainnya). Cara kami menangani keluaran besar saat ini sangat bermasalah. Beberapa poin:

  • Kernel itu sendiri harus mengatur ini - ia harus menolak untuk bahkan mengirim output melebihi titik tertentu.
  • Kernel harus menyimpan output yang besar di suatu tempat (mungkin ke disk, tetapi itu bahkan mungkin menjadi masalah di luar titik tertentu).
  • Kernel harus mengirimkan sesuatu yang menunjukkan bahwa output yang besar telah dihasilkan dan memberikan pengguna cara untuk melihatnya, atau setidaknya memberi tahu pengguna berapa banyak output yang dihasilkan dan di mana itu diletakkan.
  • Semua ini harus diintegrasikan dengan scroll / collapse keluaran secara cerdas.

Saya telah mengubah judul masalah ini untuk mencerminkan masalah yang lebih umum ini.

Oke, tapi sepertinya bagian depan lebih tahu apa itu "terlalu banyak". Jika kernel memutuskan, maka itu akan sama untuk semua frontend. Apa yang terlalu banyak untuk konsol berbeda dengan yang untuk notebook.

Saya sangat setuju dengan Anda. Mungkin masuk akal untuk memiliki pendekatan berjenjang
dimana awalnya ini ditangani oleh frontend. Tapi untuk data yang sangat besar,
Anda tahu bahwa tidak ada frontend yang dapat menanganinya. Tapi yang paling banyak
yang penting adalah bahwa di luar titik tertentu, tidak ada manusia yang dapat secara wajar
lihat hasilnya. Ini bukan hanya tentang kinerja, ini tentang pengguna
pengalaman. Saya rasa kita bisa cukup agresif dalam memberi tahu pengguna "Anda
hanya mencoba menghasilkan lebih banyak keluaran daripada yang mungkin terlihat "
terlepas dari masalah kinerja.

Pada hari Sen, 12 Jan 2015 pukul 10:38, Doug Blank [email protected]
menulis:

Oke, tapi sepertinya bagian depan lebih tahu apa itu "terlalu banyak". Jika
kernel memutuskan, maka itu akan sama untuk semua frontend. Apa juga
banyak untuk konsol berbeda dari pada notebook.

-
Balas email ini secara langsung atau lihat di GitHub
https://github.com/ipython/ipython/issues/6771#issuecomment -69620565.

Brian E. Granger
Universitas Negeri Cal Poly, San Luis Obispo
@ellisonbg di Twitter dan GitHub
[email protected] dan [email protected]

Terinspirasi oleh komentar dari @Carreau, saya membuat ekstensi notebook ini:
https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/limit-output

Berfungsi dengan baik bagi saya untuk mencegah peramban mogok dalam putaran cetak yang tak ada habisnya.

Setuju dengan @juhasch sebagian besar browser mogok terjadi karena elemen DOM.
dan 'batas' sangat bergantung pada jenis keluaran. Menampilkan jumlah data yang sama dengan PNG atau teks sangat berbeda dalam hal apa yang dapat ditangani browser.

@juhasch Saya rasa saya mungkin harus mengaktifkan ekstensi Anda secara default untuk IPython 3, jika tidak stack overflows membuat notebook tidak dapat dimuat.

BTW, apa yang memungkinkan Anda untuk pergi ke / nbextensions / dan klik Activate for an extension ... Saya menginginkannya juga!

Ekstensi server untuk / nbextensions / ada dalam permintaan tarik ini:
https://github.com/ipython-contrib/IPython-notebook-extensions/pull/164

Menutup karena masalah ini tidak ada di IPython itu sendiri dan jika masih bermasalah dan relevan harus dibuka di repositori yang tepat. Ini akan memungkinkan untuk menjaga jumlah masalah yang dibuka pada repo IPython di bawah kendali.

Jangan ragu untuk terus berkomentar atau membuka kembali jika perlu.

Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat