ফায়ারফক্সে আইপিথন নোটবুকটিতে সিটিআরএল + সি এর সমতুল্য যে কক্ষগুলি চলছে সেগুলি ভাঙ্গার জন্য?


103

আমি আইপিথন নোটবুক ব্যবহার শুরু করেছি এবং এটি উপভোগ করছি। কখনও কখনও, আমি বাগি কোডটি লিখি যা বিশাল মেমরির প্রয়োজনীয়তা নেয় বা অসীম লুপ থাকে। আমি "বিঘ্নিত কার্নেল" বিকল্পটি স্বাচ্ছন্দ্য বা অবিশ্বস্ত দেখতে পাই এবং কখনও কখনও স্মৃতিতে সমস্ত কিছু হারাতে আমাকে কার্নেলটি পুনরায় চালু করতে হয়।

আমি মাঝে মাঝে স্ক্রিপ্টগুলিও লিখি যার ফলে ওএস এক্স মেমরি শেষ হয়ে যায় এবং আমাকে একটি হার্ড পুনরায় বুট করতে হয়। আমি ১০০% নিশ্চিত নই, তবে আমি যখন এর আগে বাগ লিখেছি এবং টার্মিনালে পাইথন চালিয়েছি, আমি সাধারণত আমার স্ক্রিপ্টগুলি CTRL+ করতে Cপারি।

আমি ম্যাক ওএস এক্সে ফায়ারফক্সের সাথে আইপিথন নোটবুকের আনাকোন্ডা বিতরণটি ব্যবহার করছি।


4
আমি cntrl + mi শর্টকাট বা কার্নেল> 0.13-এ বিঘ্নিত ড্রপ ডাউন (ম্যাকোএসএক্সে অ্যানাকোন্ডার জন্য ডিফল্ট) এর মাধ্যমে একটি অসীম লুপকে বাধা দিতে কখনও সফল হইনি। সমস্যাটি 1.0 এ স্থির হয়েছে বলে মনে হচ্ছে।
কেএলডেভেনপোর্ট

উত্তর:


57

আমি ভুল হতে পারে, কিন্তু আমি নিশ্চিত "বিঘ্ন কার্নেল" বোতামে শুধু কোডে একটি SIGINT সংকেত পাঠায় আছি যে আপনি বর্তমানে (এই ধারণা ফার্নান্দো এর মন্তব্য দ্বারা সমর্থিত চালাচ্ছেন এখানে , যা একই জিনিস যে আঘাত করা হয়) সিটিআরএল + সি করবে। পাইথনের মধ্যে কিছু প্রক্রিয়া হঠাৎ অন্যের চেয়ে সিগিন্টগুলি হ্যান্ডেল করে।

আপনার যদি আইপিথন নোটবুকে চলমান কিছু থামানোর দরকার হয় এবং আপনি কোনও টার্মিনাল থেকে আইপথন নোটবুক শুরু করেন, আপনি পুরো আইপথন নোটবুক সার্ভারকে বাধাগ্রস্থ করতে সেই টার্মিনালে দুবার CTRL + C চাপতে পারেন। এটি আইপিথন নোটবুক পুরোপুরি বন্ধ করে দেবে, যার অর্থ আপনার কাজটি পুনরায় আরম্ভ করা বা সংরক্ষণ করা সম্ভব হবে না, সুতরাং এটি অবশ্যই দুর্দান্ত সমাধান নয় (এটি আপনাকে একটি সুরক্ষা বৈশিষ্ট্য হিসাবে দু'বার সিটিআরএল + সি আঘাত করতে হবে যাতে লোকেরা না করে দুর্ঘটনাক্রমে এটি করুন)। জরুরী অবস্থার ক্ষেত্রে, তবে এটি সাধারণত "বিঘ্নিত কার্নেল" বোতামের চেয়ে দ্রুত প্রক্রিয়াটিকে হত্যা করে।


13
বিকল্পভাবে, আপনি আপত্তিকর কার্নেলটি পুনরায় চালু করতে বা বন্ধ করতে পারেন - আইপথন সার্ভারটি মারার চেয়ে কম কঠোর। এটি Kernelড্রপডাউন বা নোটবুক সার্ভারের পৃষ্ঠা ( Shutdownআপত্তিজনক নোটবুকের নামের ডানদিকে বোতাম) থেকে করা যেতে পারে।
drevicko

4
দুর্ভাগ্যক্রমে মনে হয় যে ব্রাউজারটি এত প্রতিক্রিয়াবিহীন হয়ে উঠতে পারে যে সার্ভার পৃষ্ঠায় পৌঁছানো শক্ত।
কে। মাইকেল আয়ে

কোনও প্রক্রিয়া বাধা দেওয়ার কি কোনও উপায় আছে jupyter-console? II / নিয়ন্ত্রণ-সি কাজ করে না। এবং কার্নেলটি পুনরায় আরম্ভ করার জন্য অন্য কোনও শর্টকাট নেই।
alpha_989

79

Iকার্নেলটি বাধতে আপনি দুবার টিপতে পারেন ।

আপনি কেবল কমান্ড মোডে থাকলে এটি কাজ করে। যদি ইতিমধ্যে সক্ষম না Escহয় তবে এটি সক্ষম করতে টিপুন ।


এটি আইপিথনের নির্দিষ্ট সংস্করণ বা নির্দিষ্ট ওএসের জন্য?
গ্রেগ

আপনি আমাকে মাত্র 20 মিনিট বাঁচিয়েছেন, অপরিচিত আপনাকে ধন্যবাদ
sapo_cosmico

6

আইপিথন নোটবুকের শর্টকাট এখানে দেওয়া হল।

Ctrl-m iকার্নেল বাধা দেয়। (এটি হ'ল আমি একমাত্র পত্র পরে Ctrl-m)

এই উত্তর অনুসারে , Iদু'বার পাশাপাশি কাজ করে।


5

উপরেরটি যুক্ত করতে: বাধা যদি কাজ না করে তবে আপনি কার্নেলটি পুনরায় চালু করতে পারেন।

কার্নেল ড্রপডাউন >> পুনরায় চালু >> পুনরায় আরম্ভ এবং পরিষ্কার আউটপুট যান। এটি সাধারণত কৌশলটি করে। যদি এটি এখনও কাজ না করে, টার্মিনালে (বা টাস্ক ম্যানেজার) কার্নেলটি হত্যা করুন এবং তারপরে পুনরায় চালু করুন।

বাধা সমস্ত প্রক্রিয়া ভাল কাজ করে না। আর কার্নেলটি ব্যবহার করে আমার বিশেষত সমস্যা হচ্ছে।


এই কৌশলটি আমার জন্য এটি করেছে: 2 বিলিয়ন এন্ট্রি (পূর্বে জানা উচিত ছিল) মাল্টি কোর কমিয়ানদের ক্লাস্টারিংয়ের কারণে সম্পূর্ণ প্রতিক্রিয়াহীন জুপিটার নোটবুক
অ্যালেক্স

4

আপডেট : আমার সমাধানটিকে এককভাবে অজগর স্ক্রিপ্টে পরিণত করেছে।

এই সমাধানটি আমাকে একাধিকবার বাঁচিয়েছে। আশা করি অন্যরাও এটির কাজে লাগবে। এই পাইথন স্ক্রিপ্টটি cpu_thresholdসিপিইউর চেয়ে বেশি কোনও জুপিটার কার্নেল খুঁজে পেতে পারে এবং ব্যবহারকারীকে SIGINTকার্নেলের কাছে প্রেরণ জানায় ( কীবোর্ডারটার্ন্ট্রাপ্ট )। SIGINTকার্নেলের সিপিইউ ব্যবহার নীচে না যাওয়া পর্যন্ত এটি প্রেরণ চালিয়ে যাবে cpu_threshold। যদি একাধিক দুর্ব্যবহারকারী কার্নেলগুলি থাকে তবে এটি ব্যবহারকারীকে তাদের প্রত্যেককে বাধা দিতে অনুরোধ করবে (সর্বোচ্চ সিপিইউ ব্যবহারের মাধ্যমে সর্বনিম্ন নির্দেশিত)। জুপিটার এপিআই ব্যবহার করে জুপিটার কার্নেলের নাম খুঁজে পেতে কোড লেখার জন্য একটি বৃহত ধন্যবাদ gcbeltramini তে যায় । এই স্ক্রিপ্টটি ম্যাকোস-এ পাইথন 3 দিয়ে পরীক্ষা করা হয়েছিল এবং এতে জুপিটার নোটবুক, অনুরোধ, জসন এবং সোসুটি দরকার হয়।

আপনার হোম ডিরেক্টরিতে স্ক্রিপ্টটি রাখুন এবং তারপরে ব্যবহারটি দেখে মনে হচ্ছে:

python ~/interrupt_bad_kernels.py
Interrupt kernel chews cpu.ipynb; PID: 57588; CPU: 2.3%? (y/n) y

স্ক্রিপ্ট কোড নীচে:

from os import getpid, kill
from time import sleep
import re
import signal

from notebook.notebookapp import list_running_servers
from requests import get
from requests.compat import urljoin
import ipykernel
import json
import psutil


def get_active_kernels(cpu_threshold):
    """Get a list of active jupyter kernels."""
    active_kernels = []
    pids = psutil.pids()
    my_pid = getpid()

    for pid in pids:
        if pid == my_pid:
            continue
        try:
            p = psutil.Process(pid)
            cmd = p.cmdline()
            for arg in cmd:
                if arg.count('ipykernel'):
                    cpu = p.cpu_percent(interval=0.1)
                    if cpu > cpu_threshold:
                        active_kernels.append((cpu, pid, cmd))
        except psutil.AccessDenied:
            continue
    return active_kernels


def interrupt_bad_notebooks(cpu_threshold=0.2):
    """Interrupt active jupyter kernels. Prompts the user for each kernel."""

    active_kernels = sorted(get_active_kernels(cpu_threshold), reverse=True)

    servers = list_running_servers()
    for ss in servers:
        response = get(urljoin(ss['url'].replace('localhost', '127.0.0.1'), 'api/sessions'),
                       params={'token': ss.get('token', '')})
        for nn in json.loads(response.text):
            for kernel in active_kernels:
                for arg in kernel[-1]:
                    if arg.count(nn['kernel']['id']):
                        pid = kernel[1]
                        cpu = kernel[0]
                        interrupt = input(
                            'Interrupt kernel {}; PID: {}; CPU: {}%? (y/n) '.format(nn['notebook']['path'], pid, cpu))
                        if interrupt.lower() == 'y':
                            p = psutil.Process(pid)
                            while p.cpu_percent(interval=0.1) > cpu_threshold:
                                kill(pid, signal.SIGINT)
                                sleep(0.5)

if __name__ == '__main__':
    interrupt_bad_notebooks()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.