Ipython: Kernel/Interrupt Kernel tidak menghentikan subproses yang macet di notebook

Dibuat pada 4 Jun 2013  ·  47Komentar  ·  Sumber: ipython/ipython

Ketika subproses dijalankan dari notebook, jika macet, kernel akan terkunci menunggunya. Memilih Kernel/Interrupt dari menu tidak menghentikan subproses, melainkan meninggalkan kernel dalam keadaan tidak stabil, "terkunci sebagian", di mana sel-sel lain tidak dieksekusi. Satu-satunya resolusi adalah me-restart kernel.

Ini terjadi pada saya di Windows - saya tidak tahu apakah itu juga terjadi di Unix.

Untuk mendemonstrasikan, mulai buku catatan dan masukkan !python dalam sel. Proses akan terkunci saat menunggu input interaktif. Karena tidak ada cara untuk memberikan input tersebut, kernel harus di-restart untuk melanjutkan.

qtconsole windows

Komentar yang paling membantu

Saya pikir saya baru saja digigit oleh ini dan saya harus me-restart kernel, artinya saya baru saja kehilangan banyak data…

Saya menggunakan pdb untuk men-debug suatu fungsi. Saya menjalankan ulang sel tanpa terlebih dahulu keluar dari pdb , dan sekarang saya tidak dapat menginterupsi apa pun.

Berikut adalah contoh minimal yang mereproduksi ini:

def test():
    import pdb; pdb.set_trace()  # XXX BREAKPOINT
    return 0

test()

Jalankan sel ini dua kali berturut-turut.

Semua 47 komentar

duplikat #514

Terima kasih, saya tidak melihat duplikatnya. Karena itu, t#514 sedang mendiskusikan skenario yang jauh lebih kompleks, yang melibatkan interaksi nyata dengan subproses (dan tampaknya berbasis Unix, karena ini tentang interaksi gaya pty). Untuk persyaratan saya, cara sederhana untuk membunuh subproses nakal akan dilakukan. Pertimbangkan sesuatu yang sederhana seperti !sleep 50000 , di mana hanya bisa mematikan tidur adalah yang Anda inginkan. (Mungkin Ctrl-C berfungsi untuk ini di Unix, tetapi tidak di Windows).

Maaf, saya mengerti maksud Anda sekarang. Pembukaan kembali sebagai masalah terpisah - interupsi tidak mengganggu subproses di Windows.

Saya tidak yakin ini terbatas pada subproses. Coba jalankan input() atau raw_input() dan kemudian klik tombol interupsi--kernel hang dan harus di-restart.

@arijun di OS apa? mengganggu input dan raw_input meningkatkan KeyboardInterrupt di sini (OS X).

Maaf, jendela. Itu sebabnya saya pikir itu kemungkinan masalah yang sama yang dimiliki @pfmoore , karena itu juga terjadi di windows.

Ah, sial. Aku tahu apa itu bug. Saya pikir ini adalah bug libzmq (atau pyzmq) yang mencegahnya menangani interupsi dengan benar saat melakukan polling pada soket zmq. Tidak ada apa-apa di IPython. _mendesah_

Saya pikir saya baru saja digigit oleh ini dan saya harus me-restart kernel, artinya saya baru saja kehilangan banyak data…

Saya menggunakan pdb untuk men-debug suatu fungsi. Saya menjalankan ulang sel tanpa terlebih dahulu keluar dari pdb , dan sekarang saya tidak dapat menginterupsi apa pun.

Berikut adalah contoh minimal yang mereproduksi ini:

def test():
    import pdb; pdb.set_trace()  # XXX BREAKPOINT
    return 0

test()

Jalankan sel ini dua kali berturut-turut.

Masalah yang sama ini terjadi pada saya di Unix juga kata demi kata.

"Ketika subproses dijalankan dari notebook, jika macet, kernel akan dikunci menunggunya. Memilih Kernel/Interrupt dari menu tidak menghentikan subproses, melainkan membiarkan kernel dalam keadaan tidak stabil, "terkunci sebagian" , di mana sel lain tidak dieksekusi. Satu-satunya resolusi adalah me-restart kernel."

Terima kasih atas contoh bagus dari pdb hang, wmayner. Tetapi karena pdb tidak berjalan dalam subproses, saya membuka masalah terpisah untuk pdb: #10516

Mencetak terlalu banyak data, katakanlah secara tidak sengaja mencetak array numpy raksasa, dapat membuat kernel benar-benar tidak responsif dan tidak mungkin dihentikan

Apakah solusi untuk masalah ini sudah ditemukan? saya baru saja menjalankan model pembelajaran mesin yang membutuhkan waktu 14 jam untuk diselesaikan dan sekarang kernel saya macet dan tidak menjalankan sel. jika saya restart, saya harus menjalankan model lagi selama 14 jam. Jadi apakah ada solusi?

Jika subproses tertentu macet, Anda mungkin dapat menemukannya di pengelola tugas dan secara paksa mematikannya seperti itu. Semoga itu memungkinkan kernel terus berlanjut.

tidak, masalahnya adalah kernel mengirim spam ke server web sampai mati atau semacamnya. membunuh server web membunuh kernel afaik

Saya juga berurusan dengan notebook yang macet: interupsi, mulai ulang, sambungkan kembali - tidak ada yang melakukan apa pun. Indikator [*] tetap berada di sebelah sel seolah-olah mereka antri untuk dijalankan tetapi tidak ada sel yang dieksekusi.

Perilaku dimulai setelah menjalankan sel yang berisi:

filedir = "20161214_rooftest"

!ls -RC $filedir

Yang aneh karena saya memiliki sel analog di tempat lain yang berjalan dengan sukses. Saya tidak yakin bagaimana/jika ls bisa macet tetapi sebaliknya situasi saya tampaknya cocok dengan masalah ini.

Apakah ada solusi untuk ini. Kernal tidak dapat diinterupsi.
Bagi saya itu terjadi dengan GridSearchCV di sklearn .

Ada proses bernama conda.exe di Task manager. Saya mematikan proses itu dan saya berhasil menginterupsi kernel

Interupsi masih rusak. Saya harus memulai ulang dan memuat ulang impor saya setiap saat.

masalah yang sama di lab jupyter pada kernel python 3.7

masalah yang sama di Jupyter Notebook dan saya tidak dapat menemukan proses bernama conda.exe di Task manager. Sudah ada update solusi belum?

Bukan solusi
Terkadang mencoba menyambung kembali ke kernel membantu dalam kasus ini

Mengamati hal yang sama, di Windows 10

Apakah ada yang berhasil dalam hal itu? aku menjadi gila

Ada proses bernama conda.exe di Task manager. Saya mematikan proses itu dan saya berhasil menginterupsi kernel

@ahmedrao Bagaimana????

Masalah ini sudah ada selama enam tahun dan masih belum ada solusi.

Masalah ini sudah ada selama enam tahun dan masih belum ada solusi.

enam tahun tanpa solusi apa pun, cukup restart kernel

Memiliki masalah yang sama semakin sering, hampir sampai pada titik di mana notebook menjadi tidak dapat digunakan yang sangat disayangkan. Pada Anaconda 3.7 dan sel hanya menggantung dengan tanda bintang, dan saya tidak dapat menginterupsi kernel.

Tandai Masalah yang Sama

Selalu mengalami masalah ini terutama dengan dbg dan input.
Windows 10; Server buku catatan 5.7.8; Python 3.6.6.; Konda 4.7.5
Telah belajar bahwa pada dasarnya saya tidak dapat men-debug Notebook dengan andal :(

ya, masalahnya masih ada. Apakah ada cara untuk mengatasi ini?? Saya tidak ingin menjalankan notebook saya lagi , karena terlalu lama untuk sampai ke tempat saya !!

Ke atas!
Masalah ini telah menyusahkan saya selama bertahun-tahun sekarang setiap kali saya menggunakan pdb dan lupa untuk berhenti sebelum saya menjalankan kembali sel.

Saya membuat hadiah di BountySource. Mungkin ini akhirnya akan diperbaiki jika kita bisa mengumpulkan cukup uang.
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help

Untuk masalah proses secara khusus, pada Windows secara khusus, inilah teori (masih belum teruji):

  1. Proses dijalankan melalui IPython.utils._process_win32.system , yang memanggil _system_body , yang memanggil p.wait() pada objek subprocess.Popen .
  2. Windows subprocess.Popen.wait() memiliki masalah umum yang tidak dapat diganggu: https://bugs.python.org/issue28168

Jika itu penyebabnya, beralih ke perulangan sibuk setiap 100 ms atau lebih mungkin akan membuatnya terganggu, atau jika tidak maka mengambil pendekatan di tambalan.

Terima kasih @Carreau!

Terima kasih @Carreau! Kapan ini akan menemukan jalannya ke rilis umum, dan apakah itu berarti bahwa kita kemudian dapat menggunakan tombol Interrupt Kernel dengan sukses?

Saya mungkin akan melakukan 7.13 besok. Mungkin memperbaiki tombol interupsi.

Hai @Carreau
Saya menghadapi masalah ini ketika saya mencoba untuk mengganggu eksekusi sel yang sedang berlangsung, interupsi berlangsung selamanya dan akhirnya saya harus memulai ulang.

Jadi untuk menunjukkan, seperti yang disarankan @wmayner cara untuk mereplikasi masalah. Saya telah melampirkan beberapa tangkapan layar untuk hal yang sama.
pyt1

Versi Jupyter di mesin saya.
pyt2

@Arpit-Gole pdb adalah masalah spesifiknya sendiri; Saya berharap untuk segera memperbaikinya juga: https://github.com/ipython/ipython/issues/10516

@itamarst Saya melatih model sebagai berikut:

forest_clf = RandomForestClassifier() cross_val_score(forest_clf, X_train, y_train, cv=3, scoring='accuracy', verbose=10, n_jobs=-1)

Sekarang saya tahu itu pasti akan memakan waktu berdasarkan dataset saya. Tetapi katakan untuk alasan apa pun saya memilih untuk menghentikan pemrosesan setengah jalan dengan menekan Kernel>Interrupt Kernel .
Idealnya, itu harus mengganggu tetapi butuh selamanya untuk berhenti.
Sekarang saya tidak ingin memulai ulang karena semua kemajuan saya akan hilang.

Tolong bantu!

Jika apa yang Anda coba interupsi diimplementasikan dalam C maka tidak ada yang bisa dilakukan. Terserah perpustakaan yang Anda gunakan untuk menangani signint.

Saya juga terkadang mengalami hal ini... Berikut adalah contoh yang dapat direproduksi dari jupyer lab:

BUAT DATA

import requests
import pandas as pd

url='https://raw.githubusercontent.com/numenta/NAB/master/data/realKnownCause/nyc_taxi.csv'
r = requests.get(url, allow_redirects=True)
        with open('data/nyc_taxi.csv', 'wb') as f:
            f.write(r.content)
df_taxi = (
        pd.read_csv('data/nyc_taxi.csv')
        .assign(timestamp=lambda x: pd.to_datetime(x.timestamp))
)

df_train = df_taxi.iloc[:5000]
temp_train = df_train.set_index('timestamp')

Jalankan Pencarian Kotak: INI TIDAK DAPAT DIGANGGU

import itertools
#set parameter range
p = range(0,3)
q = range(1,3)
d = range(1,2)
s = [24,48]

# list of all parameter combos
pdq = list(itertools.product(p, d, q))
seasonal_pdq = list(itertools.product(p, d, q, s))
# SARIMA model pipeline
for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            mod = sm.tsa.statespace.SARIMAX(temp_train[:240],
                                            order=param,
                                            seasonal_order=param_seasonal)

            results = mod.fit(max_iter = 50, method = 'powell')

            print('SARIMA{},{} - AIC:{}'.format(param, param_seasonal, results.aic))
        except as e:
            print(e)
            continue

Apakah ada saran?

mengalami masalah ini tiga kali sore ini, mengingatkan saya pada masa lalu yang indah ketika saya masih menggunakan urllib.
pikir itu di urllib, karena tidak ada tanggapan atas permintaan saya.
Saya bekerja tetapi coding, saya harus menemukan solusi tetapi jawaban. Jadi saya menyimpan setiap variabel ke file lokal.
benar-benar tidak ingin melihat itu terjadi lagi dan lagi.

Saya menghadapi masalah yang sama saat menggunakan tensorflow dan GPU untuk melatih model pembelajaran mendalam.

Jalani ini dengan waktu. tidur dan permintaan

Juga mengalami masalah dengan permintaan time.sleep di Windows, tetapi berjalan dengan baik di Mac OS X

Mengalami masalah dengan ThreadPoolExecutor... Sesuatu seperti ini:

numberOfImageGatherers = 2

with concurrent.futures.ThreadPoolExecutor(max_workers=numberOfImageGatherers + 1) as executor:
        futures = []

        for imageGatherer in range(numberOfImageGatherers):
            imageDataGatherer = ImageDataGatherer(batch_size)
            futures.append(executor.submit(imageDataGatherer.gatherImageData, pipeline))

        modelTrainingConsumer = ModelTrainingConsumer(vae, plot_losses)    

        futures.append(executor.submit(modelTrainingConsumer.trainModel, pipeline))

        concurrent.futures.wait(futures)

Satu-satunya cara untuk menginterupsi adalah dengan me-restart kernel... sangat membuat frustrasi

Apakah halaman ini membantu?
0 / 5 - 0 peringkat