Ipython: "Jalankan Semua" di notebook hang pada %matplotlib qt

Dibuat pada 16 Apr 2014  ·  39Komentar  ·  Sumber: ipython/ipython

Ini adalah bug yang aneh, tetapi tampaknya dapat direproduksi di seluruh sistem.

Jika saya memiliki buku catatan di mana sel pertama berada

%matplotlib qt

Dan saya pilih "Jalankan Semua", IPython mengeksekusi sel pertama tetapi kemudian hang. Ikon status di sudut kanan atas adalah lingkaran terbuka, tetapi saya tidak dapat menjalankan sel lain. Jika saya menambahkan pernyataan cetak sederhana setelah baris %matplotlib , itu akan dieksekusi dan dicetak ke zona keluaran.

Ini tidak terjadi jika saya menjalankan sel "secara manual". Setelah itu terjadi, saya dapat memilih "Jalankan Semua" tanpa masalah.

Ini terjadi dengan IPyhton 2.0 pada OSX 10.6 dan 10.8. Saya menggunakan Python 2.7, melalui anaconda.

Senang mencoba apa saja untuk melacak ini lebih lanjut ...

bug matplotlib

Komentar yang paling membantu

Masalahnya juga terjadi dengan sihir %gui qt , meskipun saya pikir itu mencoba mengimpor matplotlib dalam beberapa keadaan jadi saya tidak yakin.

Semua 39 komentar

Saya melihat hal serupa dengan instalasi Python 2.7 dari miniconda di windows. Ketika saya memiliki buku catatan di mana sel pertama adalah:

%pylab

"Jalankan Semua" akan selalu hang bahkan setelah secara manual menjalankan sel itu sendiri. Setelah ini, saya harus Kernel-> Restart agar notebook merespons apa pun. Solusi saya adalah menjalankan sel itu secara manual dengan sendirinya, pindah ke sel berikutnya dan kemudian "Jalankan Semua Di Bawah".

Saya juga senang memberikan lebih banyak info untuk membantu melacak ini lebih lanjut.

Saya juga dapat mengonfirmasi ini (dan agak mengganggu jika Anda memiliki sel pertama dengan %matplotlib dan beberapa impor (yang membutuhkan waktu untuk dieksekusi), dan Anda ingin menjalankannya bersama dengan sel berikutnya).

Cara sederhana untuk mereproduksi ini:

  1. Buku catatan dengan dua sel:

%matplotlib import time time.sleep(10)

print "This will not print"

  1. Jalankan keduanya sekaligus (tekan shift-enter dua kali)
  2. Sel pertama akan dijalankan, tetapi kemudian kernel hang (sel kedua tidak dieksekusi, Anda tidak dapat menjalankan apa pun, meskipun indikator mengatakan bahwa kernel sudah siap).

untitled

Jadi itu tidak harus terkait dengan "Jalankan semua", tetapi hanya untuk mengeksekusi beberapa sel di mana satu sel memiliki %matplotlib .

Diuji terakhir dengan IPython 2.1, Windows 64 bit, Firefox 31

Setelah sedikit bereksperimen, saya menemukan bahwa masalah ini pertama kali muncul untuk saya di versi 2.0.0. Jika saya memutar kembali ke versi 1.2.1 dengan

conda install ipython=1.2.1

masalahnya hilang.

Windows 32 bit, python 2.7.7, Firefox 31

Saya juga menemukan bug ini, dan dapat mereproduksi menggunakan metode di atas menggunakan Python 3.4.1, Anaconda 2.1.0 (64-bit) pada Windows 8, IPython 2.3.1
Ini adalah bug yang cukup mengganggu. Apakah ada yang bisa saya lakukan untuk membantu melacaknya? Kapan tonggak 4.0 (kira-kira) diharapkan selesai?

Saya mengkonfirmasi bug menggunakan versi ipython terbaru dari github (e2778c5f4047d03f5f025bd53d1704a0cf9f0337) di Linux Mint 17, python 3.4 dan matplotlib 1.4.0.

Ada kabar tentang ini guys? Saya dapat melakukan lebih banyak pengujian jika diperlukan. Bug ini sangat mengganggu!!!

Saya dapat mengkonfirmasi bahwa ini terjadi pada saya juga, terjadi sepanjang waktu di CentOS w/ python 2.7 dan matplotlib 1.4.4

Apakah ini berfungsi jika Anda menjalankan sel secara manual?

Lihat komentar saya di atas (https://github.com/ipython/ipython/issues/5629#issuecomment-50603511), itu juga muncul jika Anda menjalankan banyak sel secara manual

Ya - ini pada dasarnya adalah masalah waktu yang saya percaya. Jika Anda Shift+Enter jalankan sel, lalu tunggu sebentar, lalu lanjutkan dengan yang lain, maka itu berfungsi. Jika Anda menekan Shift+Enter beberapa kali berulang kali, maka hang. Menjalankan sel lebih lanjut tidak menyebabkan kode apa pun benar-benar dijalankan (alias lingkaran kecil di kanan atas masih kosong).

^ itu juga yang saya amati.

Diverifikasi di Ipython Notebook 3.1.0. Solusi:

import time
%matplotlib
time.sleep(1)

Jelek, tapi itu terlalu menjengkelkan menyerah pilihan untuk menjalankan semua.

Saya membuat ini berfungsi di mesin saya juga.

Pada Jumat, 12 Jun 2015 pukul 07.02, quicknir [email protected] menulis:

Diverifikasi di Ipython Notebook 3.1.0. Solusi:

waktu impor
%matplotlib
waktu.tidur(1)

Jelek, tapi itu terlalu menjengkelkan menyerah pilihan untuk menjalankan semua.


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

bisakah kita mendapatkan pencapaian ini untuk 4.1 (atau 5.0)?
Menggantung notebook terdengar (bagi saya) sedikit lebih parah daripada yang sesuai untuk tonggak daftar keinginan. Juga, bug ini mengganggu saat menggunakan matplotlib (meskipun ada solusinya).

Haruskah kita memiliki sleep(1) dalam sihir matplotlib itu sendiri sebagai solusi sampai kita mengetahui alasannya ??

:+1:

Solusi tidur jarang berhasil untuk saya. Saya telah melihatnya bekerja beberapa kali, tetapi sebagian besar waktu saya mencobanya, notebook masih hang.

Satu-satunya solusi yang secara konsisten bekerja untuk saya adalah:

  1. Jalankan secara manual sel yang berisi %matplotlib
  2. Tunggu indikasi kernel idle
  3. pilih sel berikut
  4. "Jalankan Semua Di Bawah"

FWIW Saya mencoba menguji ini sedikit untuk mendapatkan perkiraan yang lebih masuk akal tentang seberapa baik ini bekerja.

Saya membuat buku catatan dengan tiga sel berikut:

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

kemudian di shell berlari:

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

Mungkin tes ini tidak menggunakan kode yang benar, tetapi tampaknya berfungsi dengan baik.

Ditandai sebagai 4.1 jadi kami melihatnya.

Terima kasih.
Saya baru saja mencoba repro dari @mwaskom , dan saya mendapatkan hasil yang sama. Namun, saya kemudian merobek kode waktu dan tidur, dan menjalankan bagian shell lagi, dan itu _juga_ berhasil! Jadi, ini sepertinya bukan prosedur repro yang baik (atau solusi internal). :-/
Saya juga menemukan, seperti @tanderl , bahwa solusi tidur tidak bekerja secara konsisten untuk saya. Ini ada di ipython 3.2.1 di Ubuntu 64bit. Saya dapat mencoba hal yang sama di Windows besok.

Pada Windows 8.1, menggunakan Ipython 3.2.0 yang diinstal melalui Anaconda, saya juga menemukan bahwa solusi tidur tidak berfungsi untuk saya, yaitu dengan sleep(1) (atau bahkan nilai yang lebih besar) di sel yang sama dengan sihir matplotlib, Jalankan Semua pada kernel yang baru dimulai ulang akan tetap hang (atau tidak melakukan apa-apa, UI masih berfungsi), dengan bintang di sel berikut. Menjalankan sel secara manual satu per satu, dengan menunggu di antaranya, masih berfungsi.

Saya mengkonfirmasi apa yang dikatakan @bilderbuchi dengan tumpukan anaconda yang diperbarui di Linux Mint.

Hai,
Saya baru saja mengalami masalah serupa. Saat menjalankan notebook yang menggunakan %matplotlib inline atau sihir notebook, "jalankan semua sel" terkadang hang dan saya harus menjalankan semua sel dengan tangan.
Saya menjalankan windows 7, Python 3.5, IPython 5.1.0, notebook 4.1.0 dan matplotlib 1.5.3.
Sebagai solusinya, saya membersihkan semua output dan sepertinya berhasil. Sayangnya, saya tidak dapat menyediakan notebook yang dapat direproduksi (akan dilakukan jika saya menemukan ini di masa mendatang).

Salam Hormat,
Florian

Ini masih dalam masalah, baik di notebook jupyter dan lab.

@thomasaarholt apakah Anda memiliki prosedur reproduksi yang andal?

@bilderbuchi lihat posting asli di masalah ini, masih masalah yang sama. Ini GIF saya yang membuat ulang ini di mesin saya (OSX dengan jupyter dan qt4) terbaru

bug

@Carreau , apakah repro itu cukup untuk dikerjakan? Haruskah bug yang menggantung lebih mendesak daripada "daftar keinginan"?

@bilderbuchi @Carreau , saya baru saja melihat tag daftar keinginan.
Saya ingin menyatakan bahwa bug ini harus menjadi prioritas yang jauh lebih tinggi:

Banyak pengguna jupyter baru akan belajar menggunakan jupyter dengan notebook yang sudah ada sebelumnya. Misalnya, mereka mencoba menjalankan contoh buku kerja yang disediakan oleh beberapa plugin. Dengan perilaku saat ini, pengguna yang menggunakan perintah Jalankan Semua, atau "Shift + Enter" dengan cepat melalui notebook akan menemukan bahwa notebook hang sejak saat pertama, dan ini memberikan kesan pertama yang sangat buruk. Kesan seperti itu seringkali dapat benar-benar menekankan betapa "rumitnya coding" bagi seseorang yang baru pertama kali belajar coding, atau seseorang yang pernah mengalami pengalaman buruk (kelas/ujian) di masa lalu.

Saya ingin menyatakan bahwa bug ini harus menjadi prioritas yang jauh lebih tinggi:

Nah ini bukan masalah Prioritas lagi, bug telah terbuka selama 2+ tahun sekarang, dan masalahnya tidak ada yang bisa mengetahuinya. Kami memang mencoba mencari tahu, tetapi tampaknya ini adalah perbaikan yang sulit dipahami, dan kami tidak bisa menjadi ahli di semua eventloop kerangka kerja dan perpustakaan di sekitarnya. Kami akan dengan senang hati melakukan sesuatu tetapi masalah ini telah berlangsung begitu lama sehingga menandainya sebagai prioritas yang lebih tinggi tidak akan membantu. Tak satu pun dari devs tahu apa yang terjadi. Kalau tidak, kami akan memperbaikinya.

@Carreau Bisakah Anda mengarahkan saya ke mana dalam kode ipython integrasi antara server kernel dan GUI harus terjadi?

Apakah ada cara untuk membuka buku catatan secara terprogram di browser dan menjalankan semua sel? Itu mungkin akan memungkinkan kita untuk git membagi dua kode untuk menentukan perubahan mana yang menyebabkan ini.
Saya telah mencoba menjalankan notebook yang menyinggung melalui nbconvert --execute dari terminal dan dari dalam sesi IPython, tetapi sejauh ini tidak dapat menggantungnya.

@bilderbuchi Pertama-tama, apakah Anda dapat mereproduksi bug "dengan tangan" di mesin Anda?

Iya. Saya menemukan beberapa perilaku menarik mencoba variasi sihir yang berbeda
Isi sel pertama:

%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

(Bug yang berbeda saat melakukan %matplotlib qt adalah ContinuumIO/anaconda-issues#1068 menurut saya.)
Sel kedua hanya memiliki

print("This will not print")

Jika saya mengatakan "hang" di atas, maksud saya sel kedua selalu memiliki bintang di angka, bukan "2", dan pesannya tidak pernah dicetak.
Semua ini dieksekusi dengan Kernel - Restart & Run All untuk memastikan yang bersih. Ini ada di Python 3.6.1 melalui Anaconda di Windows 10, IPython 5.3.0, Firefox 52.0.2.

Bisakah Anda mengarahkan saya di mana dalam kode ipython integrasi antara server kernel dan GUI seharusnya terjadi?

Ada deskripsi tentang bagaimana integrasi loop acara dimaksudkan untuk bekerja di sini: http://ipython.readthedocs.io/en/stable/config/eventloops.html#event -loops-in-the-kernel

Dan kode untuk loop acara Qt 5 dimulai di sini: https://github.com/ipython/ipykernel/blob/20426cdad71820642dc69b95c30565d155521509/ipykernel/eventloops.py#L89

Hanya untuk memeriksa - apakah masalahnya pasti dengan bagian "matplotlib" dari %matplotlib dan bukan dengan sihir pada umumnya? Untuk berjaga-jaga jika sihir lain membutuhkan waktu lebih sedikit untuk dijalankan, sehingga bugnya kurang terlihat.

Masalahnya juga terjadi dengan sihir %gui qt , meskipun saya pikir itu mencoba mengimpor matplotlib dalam beberapa keadaan jadi saya tidak yakin.

Ini tidak ada (langsung) ada hubungannya dengan matplotlib atau sihir. Ini hampir pasti merupakan kondisi balapan ketika melakukan hand off dari satu putaran acara menjalankan pertunjukan ke putaran lainnya.

Dugaan saya adalah bahwa perbaikan serupa dengan https://github.com/ipython/ipython/pull/10301/files adalah yang diperlukan di sini.

Saya telah menghadapi masalah yang sama setelah memperbarui Spyder

Saya dapat mengonfirmasi bahwa ini masih terjadi dengan %gui qt. Saya memiliki banyak barang Qt yang saya panggil dari notebook dan di notebook itu saya harus menjalankan sel pertama saya secara manual, tunggu sampai selesai, lalu Jalankan Semua Di Bawah.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat