Ipython: Kernel / Interrupt Kernel لا ينهي العمليات الفرعية المتوقفة في دفتر الملاحظات

تم إنشاؤها على ٤ يونيو ٢٠١٣  ·  47تعليقات  ·  مصدر: ipython/ipython

عندما يتم تشغيل عملية فرعية من دفتر الملاحظات ، إذا تعطلت ، سيتم قفل النواة في انتظارها. لا يؤدي تحديد Kernel / Interrupt من القائمة إلى إنهاء العملية الفرعية ، ولكنه يترك النواة في حالة "غير مستقرة جزئيًا" ، حيث لا يتم تنفيذ الخلايا الأخرى. الحل الوحيد هو إعادة تشغيل kernel.

حدث هذا بالنسبة لي على Windows - لا أعرف ما إذا كان يحدث أيضًا على Unix.

للتوضيح ، ابدأ مفكرة وأدخل! python في خلية. سيتم قفل العملية لأنها تنتظر الإدخال التفاعلي. نظرًا لعدم وجود طريقة لتوفير هذا الإدخال ، يجب إعادة تشغيل kernel للمتابعة.

qtconsole windows

التعليق الأكثر فائدة

أعتقد أنني تعرضت للعض من هذا الأمر وسأحتاج إلى إعادة تشغيل النواة ، مما يعني أنني فقدت الكثير من البيانات ...

كنت أستخدم pdb لتصحيح أخطاء دالة. أعدت تشغيل الخلية دون الخروج أولاً من pdb ، والآن لا يمكنني مقاطعة أي شيء.

إليك مثال بسيط يعيد إنتاج هذا:

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

test()

قم بتشغيل هذه الخلية مرتين على التوالي.

ال 47 كومينتر

نسخة مكررة من # 514

شكرًا ، لم ألاحظ التكرار. بعد قولي هذا ، يناقش t # 514 سيناريو أكثر تعقيدًا ، يتضمن التفاعل الفعلي مع العمليات الفرعية (ويبدو أنه يعتمد على Unix ، لأنه يتعلق بالتفاعل على نمط pty). بالنسبة لمتطلباتي ، فإن الوسيلة البسيطة لقتل عملية فرعية مارقة ستفي بالغرض. ضع في اعتبارك شيئًا بسيطًا مثل !sleep 50000 ، حيث أن مجرد القدرة على قتل النوم هو كل ما تريده. (ربما يعمل Ctrl-C مع هذا على Unix ، لكنه لا يعمل على Windows).

آسف ، أرى ما تعنيه الآن. إعادة الفتح كمسألة منفصلة - المقاطعة وعدم مقاطعة العمليات الفرعية على Windows.

لست متأكدًا من أن هذا يقتصر على العمليات الفرعية. حاول تنفيذ input() أو raw_input() ثم النقر فوق زر المقاطعة - تتوقف النواة ويجب إعادة تشغيلها.

arijun على أي نظام تشغيل؟ مقاطعة الإدخال و raw_input رفع KeyboardInterrupt هنا (OS X).

آسف النوافذ. لهذا السبب اعتقدت أنه من المحتمل أن تكون نفس المشكلة التي واجهتهاpfmoore ، لأن ذلك حدث أيضًا على windows.

آه حماقة. أنا أعرف ما هو هذا الخطأ. أعتقد أنه خطأ libzmq (أو pyzmq) يمنعه من التعامل مع المقاطعات بشكل صحيح أثناء الاقتراع على مآخذ zmq. لا شيء في IPython. _تنهد_

أعتقد أنني تعرضت للعض من هذا الأمر وسأحتاج إلى إعادة تشغيل النواة ، مما يعني أنني فقدت الكثير من البيانات ...

كنت أستخدم pdb لتصحيح أخطاء دالة. أعدت تشغيل الخلية دون الخروج أولاً من pdb ، والآن لا يمكنني مقاطعة أي شيء.

إليك مثال بسيط يعيد إنتاج هذا:

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

test()

قم بتشغيل هذه الخلية مرتين على التوالي.

هذه المشكلة نفسها تحدث لي في نظام يونكس أيضًا كلمة كلمة.

"عند تشغيل عملية فرعية من دفتر الملاحظات ، إذا علقت النواة ، فسيتم قفلها في انتظارها. لا يؤدي تحديد Kernel / Interrupt من القائمة إلى إنهاء العملية الفرعية ، بل يترك النواة في حالة غير مستقرة ،" مغلق جزئيًا " ، حيث لا يتم تنفيذ الخلايا الأخرى. الحل الوحيد هو إعادة تشغيل النواة. "

شكرا على المثال الجميل لتعليق pdb ، wmayner. لكن sInce pdb لا يعمل في عملية فرعية ، فتحت مشكلة منفصلة لـ pdb: # 10516

طباعة الكثير من البيانات ، دعنا نقول بطباعة مصفوفة عملاقة عملاقة ، يمكن أن تجعل النواة غير مستجيبة تمامًا ومن المستحيل إنهاؤها

هل تم العثور على حل لهذه المشكلة حتى الآن؟ لقد قمت للتو بتشغيل نموذج التعلم الآلي الذي استغرق 14 ساعة لإكماله والآن نواة بلدي عالقة ولا تنفذ الخلايا. إذا قمت بإعادة التشغيل ، لا بد لي من تشغيل النموذج مرة أخرى لمدة 14 ساعة. إذن هل هناك أي حل؟

لم أجربها ، لكن يبدو أن هذا قد يساعد: http://jupyter-contrib-nbextensions.readthedocs.io/en/latest/nbextensions/limit_output/readme.html

إذا تعطلت عملية فرعية معينة ، فمن المحتمل أن تجدها في مدير المهام وتقتلها بالقوة بهذه الطريقة. نأمل أن يتيح ذلك استمرار النواة.

لا ، المشكلة هي أن النواة ترسل بريدًا عشوائيًا إلى خادم الويب حتى الموت أو شيء من هذا القبيل. قتل خادم الويب يقتل عفيق النواة

أنا أتعامل مع دفتر ملاحظات عالق أيضًا: المقاطعة ، إعادة التشغيل ، إعادة الاتصال - لا أحد منهم يفعل أي شيء. تظل المؤشرات [*] بجوار الخلايا كما لو كانت في قائمة الانتظار للتشغيل ولكن لا يتم تنفيذ أي خلايا.

بدأ السلوك بعد تشغيل خلية تحتوي على:

filedir = "20161214_rooftest"

!ls -RC $filedir

وهو أمر غريب لأن لدي خلايا مماثلة في مكان آخر تعمل بنجاح. لست متأكدًا من كيفية / ما إذا كان ls قد يتعطل ولكن بخلاف ذلك يبدو أن وضعي يتطابق مع هذه المشكلة.

هل هناك أي حل لهذا . لا يمكن مقاطعة Kernal.
بالنسبة لي هذا يحدث مع GridSearchCV في sklearn.

كانت هناك عملية تسمى conda.exe في إدارة المهام. لقد قتلت هذه العملية وتمكنت من مقاطعة النواة بنجاح

المقاطعة لا تزال مقطوعة. لا بد لي من إعادة التشغيل وإعادة تحميل الواردات الخاصة بي في كل مرة.

نفس المشكلة في مختبر جوبيتر على نواة بيثون 3.7

نفس المشكلة في Jupyter Notebook ولا يمكنني العثور على العملية المسماة conda.exe في مدير المهام. أي تحديثات على الحل حتى الآن؟

ليس حلا
في بعض الأحيان ، تساعد محاولة إعادة الاتصال بالنواة في هذه الحالة

نلاحظ نفس الشيء في نظام التشغيل Windows 10

هل نجح أحد في ذلك؟ أنا أصاب بالجنون

كانت هناك عملية تسمى conda.exe في إدارة المهام. لقد قتلت هذه العملية وتمكنت من مقاطعة النواة بنجاح

ahmedrao كيف ؟؟؟؟

هذه المشكلة موجودة منذ ست سنوات ولا تزال بلا حل.

هذه المشكلة موجودة منذ ست سنوات ولا تزال بلا حل.

ست سنوات بدون أي حل ، فقط أعد تشغيل النواة

تواجه نفس المشكلة بشكل متكرر بشكل متزايد ، إلى النقطة التي أصبحت فيها أجهزة الكمبيوتر المحمولة غير قابلة للاستخدام وهو عار حقيقي. في Anaconda 3.7 والخلايا معلقة بعلامة النجمة ، وأنا غير قادر على مقاطعة النواة.

ضع علامة على نفس المشكلة

لطالما واجهت هذه المشكلة خاصة مع dbg والمدخلات.
نظام التشغيل Windows 10 ؛ خادم الكمبيوتر المحمول 5.7.8 ؛ بايثون 3.6.6. Conda 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 ، والذي يستدعي p.wait() على الكائن subprocess.Popen .
  2. Windows subprocess.Popen.wait() لديه مشكلة معروفة حيث لا يمكن مقاطعتها: https://bugs.python.org/issue28168

إذا كان هذا هو السبب ، فمن المحتمل أن يؤدي التبديل إلى التكرار المشغول كل 100 مللي ثانية أو نحو ذلك إلى جعله قابلاً للمقاطعة ، أو إذا لم يكن الأمر كذلك ، فسيتم اتباع النهج في التصحيح.

شكرا لك Carreau!

Carreau شكرا! متى سيجد هذا طريقه إلى إصدار عام ، وهل يعني ذلك أننا سنكون قادرين بعد ذلك على استخدام زر مقاطعة Kernel بنجاح؟

من المحتمل أن أفعل 7.13 غدًا. قد يصلح زر المقاطعة.

يا @ Carreau
أواجه هذه المشكلة عندما أحاول مقاطعة تنفيذ خلية جاري ، تستمر المقاطعة إلى الأبد وفي النهاية لا بد لي من إعادة التشغيل.

لذا من أجل التوضيح ، كما اقترح wmayner طريقة لتكرار المشكلة. لقد أرفقت بعض لقطات الشاشة لنفسه.
pyt1

إصدارات Jupyter في جهازي.
pyt2

@ Arpit-Gole pdb هي قضية خاصة بها ؛ آمل أن أصلح ذلك قريبًا أيضًا: https://github.com/ipython/ipython/issues/10516

itamarst أقوم بتدريب نموذج على النحو التالي:

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

الآن أعلم أنه من المحتم أن يستغرق وقتًا بناءً على مجموعة البيانات الخاصة بي. لكن قل لأي سبب من الأسباب اخترت إيقاف المعالجة في منتصف الطريق بالضغط على Kernel> Interrupt Kernel .
من الناحية المثالية ، يجب أن تنقطع ولكن الأمر يستغرق وقتًا طويلاً للتوقف.
الآن لا أريد إعادة التشغيل لأن كل تقدمي سيختفي.

الرجاء المساعدة!

إذا تم تنفيذ ما تحاول مقاطعته في لغة سي ، فلا داعي للقيام بأي شيء. الأمر متروك للمكتبة التي تستخدمها للتعامل مع التوقيع.

أواجه هذا أحيانًا أيضًا ... إليك مثالًا قابلًا للتكرار من مختبر Jupyer:

تحميل البيانات

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

هل من نصيحة؟

واجهت هذه المشكلة ثلاث مرات بعد ظهر هذا اليوم ، تذكرني بالأيام الخوالي عندما كنت لا أزال أستخدم urllib.
اعتقدت أنه على urllib ، لأنه لا يوجد استجابة لطلبي.
كنت أعمل لكن في البرمجة ، لا بد لي من إيجاد حل ولكن إجابة. لذلك أقوم بتخزين كل متغير في الملف المحلي.
لا أريد حقًا أن يحدث ذلك مرارًا وتكرارًا.

أواجه نفس المشكلة عند استخدام tensorflow و gpu لتدريب نموذج التعلم العميق.

واجه هذا مع الوقت والنوم والطلبات

توجد أيضًا هذه المشكلة مع طلبات time.sleep على Windows ، ولكنها تعمل بشكل جيد على Mac OS X

وجود هذه المشكلة مع 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)

الطريقة الوحيدة للمقاطعة هي إعادة تشغيل kernel ... محبط للغاية

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

peter-ch picture peter-ch  ·  4تعليقات

lewisacidic picture lewisacidic  ·  3تعليقات

ericdill picture ericdill  ·  3تعليقات

quchunguang picture quchunguang  ·  3تعليقات

sataliulan picture sataliulan  ·  4تعليقات