Ipython: カーネル/割り込みカーネルは、ノートブックでスタックしたサブプロセスを終了しません

作成日 2013年06月04日  ·  47コメント  ·  ソース: ipython/ipython

サブプロセスがノートブックから実行されるとき、それがスタックすると、カーネルはそれを待ってロックされます。 メニューからカーネル/割り込みを選択しても、サブプロセスは終了しませんが、カーネルは不安定な「部分的にロックされた」状態のままになり、他のセルは実行されません。 唯一の解決策は、カーネルを再起動することです。

これはWindowsで発生しました-Unixでも発生するかどうかはわかりません。

デモンストレーションを行うには、ノートブックを起動し、セルに!pythonと入力します。 インタラクティブな入力を待っている間、プロセスはロックされます。 その入力を提供する方法がないため、続行するにはカーネルを再起動する必要があります。

qtconsole windows

最も参考になるコメント

これに噛まれたばかりで、カーネルを再起動する必要があると思います。つまり、大量のデータが失われただけです…

pdbを使用して関数をデバッグしていました。 最初にpdbを終了せずにセルを再実行しましたが、今は何も中断できません。

これを再現する最小限の例を次に示します。

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

test()

このセルを2回続けて実行します。

全てのコメント47件

#514の複製

おかげで、私は重複を見つけていませんでした。 そうは言っても、t#514は、実際にサブプロセスと相互作用することを含む、はるかに複雑なシナリオについて議論しています(そして、ptyスタイルの相互作用に関するものであるため、Unixベースのようです)。 私の要件では、不正なサブプロセスを強制終了する簡単な方法で十分です。 !sleep 50000ような単純なものを考えてみてください。ここでは、睡眠を殺すことができれば十分です。 (たぶん、Ctrl-CはUnixでこれに対して機能しますが、Windowsでは機能しません)。

すみません、あなたが今何を意味しているのかわかります。 別の問題として再開する-Windowsのサブプロセスを中断しないで中断します。

これがサブプロセスに限定されているかどうかはわかりません。 input()またはraw_input()を実行してから、割り込みボタンをクリックしてみてください。カーネルがハングし、再起動する必要があります。

どのOSで@arijun ? inputとraw_inputを中断すると、ここでKeyboardInterruptが発生します(OSX)。

すみません、窓。 そのため、 @ pfmooreと同じ問題が発生した可能性が高いと考えました。これは、Windowsでも発生したためです。

ああ、がらくた。 私はそのバグが何であるかを知っています。 zmqソケットでのポーリング中に割り込みを適切に処理できないのは、libzmq(またはpyzmq)のバグだと思います。 IPythonでは何もありません。 _はぁ_

これに噛まれたばかりで、カーネルを再起動する必要があると思います。つまり、大量のデータが失われただけです…

pdbを使用して関数をデバッグしていました。 最初にpdbを終了せずにセルを再実行しましたが、今は何も中断できません。

これを再現する最小限の例を次に示します。

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

test()

このセルを2回続けて実行します。

これと同じ問題は、Unixでも一言一句起こります。

「ノートブックからサブプロセスを実行すると、スタックした場合、カーネルはロックされて待機します。メニューから[カーネル/割り込み]を選択しても、サブプロセスは終了しませんが、カーネルは不安定な「部分的にロックされた」状態のままになります。 、他のセルが実行されない場合。唯一の解決策は、カーネルを再起動することです。」

pdbハングの良い例をありがとう、wmayner。 しかし、sInce pdbはサブプロセスで実行されないため、pdbの別の問題を開きました:#10516

大量のデータを印刷すると、たとえば、巨大なnumpy配列を誤って印刷すると、カーネルが完全に応答しなくなり、終了できなくなる可能性があります。

この問題の解決策はまだ見つかりましたか? 完了するまでに14時間かかった機械学習モデルを実行したところ、カーネルがスタックし、セルが実行されなくなりました。 再起動すると、モデルを14時間再度実行する必要があります。 それで、解決策はありますか?

まだ試していませんが、これは役立つようです: http

特定のサブプロセスがスタックしている場合は、おそらくタスクマネージャーで見つけて、その方法で強制的に強制終了できます。 うまくいけば、それはカーネルを継続させます。

いいえ、問題は、カーネルがWebサーバーをスパムして死ぬか何かにすることです。 Webサーバーを強制終了すると、カーネルafaikが強制終了されます

私もスタックしたノートブックを扱っています:割り込み、再起動、再接続-それらのどれも何もしません。 [*]インジケーターは、実行するためにキューに入れられているかのようにセルの横に残りますが、セルは実行されません。

動作は、以下を含むセルを実行した後に始まりました。

filedir = "20161214_rooftest"

!ls -RC $filedir

正常に実行される類似のセルが他の場所にあるため、これは奇妙です。 lsがスタックする可能性があるかどうかはわかりませんが、それ以外の場合、私の状況はこの問題と一致しているようです。

これに対する解決策はありますか? Kernalを中断することはできません。
私にとっては、sklearnのGridSearchCVで発生しています。

タスクマネージャーにconda.exeという名前のプロセスがありました。 私はそのプロセスを強制終了し、カーネルを正常に中断することができました

割り込みはまだ壊れています。 インポートを毎回再起動してリロードする必要があります。

Python3.7カーネルのjupyterlabでも同じ問題が発生します

Jupyter Notebookでも同じ問題が発生し、タスクマネージャーでconda.exeという名前のプロセスが見つかりません。 ソリューションの更新はまだありますか?

解決策ではありません
この場合、カーネルに再接続しようとすると役立つことがあります

同じことをWindows10で観察する

誰かがそれで成功しましたか? 私は夢中になっています

タスクマネージャーにconda.exeという名前のプロセスがありました。 私はそのプロセスを強制終了し、カーネルを正常に中断することができました

@ahmedraoどうやって????

この問題は6年間存在し、まだ解決策がありません。

この問題は6年間存在し、まだ解決策がありません。

解決策なしで6年間、カーネルを再起動するだけです

同じ問題がますます頻繁に発生し、ノートブックが使用できなくなるところまで来ています。これは本当に残念です。 Anaconda 3.7では、セルがアスタリスクでハングし、カーネルに割り込むことができません。

同じ問題をマークする

特にdbgと入力で常にこの問題が発生しました。
ウィンドウズ10; ノートブックサーバー5.7.8; Python 3.6.6。; コンダ4.7.5
私は基本的にノートブックを確実にデバッグできないことを学びました:(

うん、問題はまだ存在します。 これを克服する方法はありますか? 自分のいる場所にたどり着くまでに時間がかかりすぎるので、ノートブックをもう一度実行したくありません。

上!
この問題は、pdbを使用し、セルを再実行する前に終了するのを忘れるたびに、何年もの間私にとって苦痛でした。

BountySourceでバウンティを作成しました。 十分なお金を集めることができれば、これは最終的に修正されるかもしれません。
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help

特にWindowsでのプロセスの問題については、次の理論があります(まだテストされていません)。

  1. プロセスはIPython.utils._process_win32.systemを介して実行され、 _system_bodyを呼び出し、 subprocess.Popenオブジェクトでp.wait()を呼び出します。
  2. Windows subprocess.Popen.wait()は、中断できないという既知の問題があります//bugs.python.org/issue28168

それが原因である場合は、100ミリ秒ごとにビジーループに切り替えると、おそらく割り込み可能になるか、そうでない場合はパッチでアプローチします。

ありがとう@Carreau!

ありがとう@Carreau! これが一般リリースに入るのはいつですか。それは、[カーネルの中断]ボタンを正常に使用できるようになることを意味しますか?

明日は7.13をやります。 割り込みボタンが修正される場合があります。

ねえ@Carreau
進行中のセルの実行を中断しようとすると、この問題に直面します。中断は永久に続き、最後に再起動する必要があります。

したがって、デモンストレーションのために、 @ wmaynerが問題を再現する方法を提案しました。 同じもののスクリーンショットをいくつか添付しました。
pyt1

私のマシンのJupyterバージョン。
pyt2

@ Arpit-Golepdbはそれ自体の特定の問題です。 私もすぐにそれを修正したいと思っています: https

@itamarst私は次のようにモデルをトレーニングしています:

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

データセットに基づいて、時間がかかることがわかっています。 しかし、なんらかの理由で、 Kernel> InterruptKernelを押して処理を途中で停止することを選択したと言います。
理想的には、中断する必要がありますが、停止するには永遠にかかります。
進行状況がすべて失われるため、再起動したくありません。

助けてください!

中断しようとしていることがCで実装されている場合は、何もする必要はありません。 sigintを処理するために使用するライブラリ次第です。

私も時々これに遭遇します...これはjupyerlabからの再現可能な例です:

データを読み込む

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')

グリッド検索の実行:これは中断できません

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

何かアドバイスはありますか?

今日の午後にこの問題に3回遭遇し、私がまだurllibを使用していた古き良き時代を思い出させます。
urllibにあると思ったのですが、私のリクエストに応答がないからです。
私は働いていましたが、コーディングしています。解決策を見つける必要がありますが、答えを見つける必要があります。 したがって、すべての変数をローカルファイルに保存します。
本当にそれが何度も起こるのを見たくありません。

ディープラーニングモデルのトレーニングにtensorflowとgpuを使用する場合、同じ問題に直面しています。

time.sleepとリクエストでこれに遭遇します

Windowsのtime.sleepリクエストでもこの問題が発生しますが、Mac OSXでは正常に動作します

ThreadPoolExecutorでこの問題が発生しています...次のようなものです。

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)

中断する唯一の方法はカーネルを再起動することです...非常にイライラします

このページは役に立ちましたか?
0 / 5 - 0 評価