Διαχείριση περιόδων λειτουργίας NotebookUtils για το Fabric

Χρησιμοποιείται notebookutils.session για τη διαχείριση του κύκλου ζωής των περιόδων λειτουργίας σημειωματαρίων στο Microsoft Fabric. Μπορείτε να διακόψετε μια αλληλεπιδραστική περίοδο λειτουργίας ή να επανεκκινήσετε τον διερμηνέα Python για εκκαθάριση, διαχείριση πόρων και αποκατάσταση σφαλμάτων.

Στον παρακάτω πίνακα παρατίθενται οι διαθέσιμες μέθοδοι διαχείρισης συνεδριών:

Μέθοδος Υπογραφή Περιγραφή
stop stop(): void Διακόπτει την τρέχουσα αλληλεπιδραστική περίοδο λειτουργίας ασύγχρονα και αποδεσμεύει πόρους. Στα σημειωματάρια PySpark, Scala και R, το δέχεται μια προαιρετική detach παράμετρο.
restartPython restartPython(): void Επανεκκινεί τον διερμηνέα Python διατηρώντας ανέπαφο το περιβάλλον Spark. Διατίθεται μόνο σε σημειωματάρια Python και PySpark.

Σημείωμα

Η stop() μέθοδος είναι διαθέσιμη σε φορητούς υπολογιστές Python, PySpark, Scala και R. Στα σημειωματάρια PySpark, Scala και R, stop() το δέχεται μια προαιρετική detach παράμετρο: stop(detach=True). Όταν detach το είναι True (η προεπιλογή), η συνεδρία αποσπάται από μια συνεδρία υψηλής ταυτόχρονης χρήσης αντί να τη διακόπτει εντελώς.

Σημείωμα

Η restartPython() μέθοδος είναι διαθέσιμη μόνο σε σημειωματάρια Python και PySpark. Δεν είναι διαθέσιμη σε φορητούς υπολογιστές Scala ή R.

Σημαντικό

Στη λειτουργία εκτέλεσης διοχέτευσης, οι περίοδοι λειτουργίας διακόπτονται αυτόματα μετά την ολοκλήρωση του κώδικα. Το session.stop() API προορίζεται κυρίως για διαδραστικές συνεδρίες όπου θέλετε να διακόψετε τη συνεδρία μέσω προγραμματισμού αντί να κάνετε κλικ στο κουμπί διακοπής.

Σημείωμα

Η stop() μέθοδος λειτουργεί ασύγχρονα στο παρασκήνιο και απελευθερώνει πόρους περιόδου λειτουργίας Spark, ώστε να είναι διαθέσιμοι σε άλλες περιόδους λειτουργίας στον ίδιο χώρο συγκέντρωσης.

Διακοπή αλληλεπιδραστικής περιόδου λειτουργίας

Αντί να επιλέξετε χειροκίνητα το κουμπί διακοπής, μπορείτε να διακόψετε μια αλληλεπιδραστική συνεδρία καλώντας ένα API στον κώδικά σας.

notebookutils.session.stop()

Το notebookutils.session.stop() API διακόπτει την τρέχουσα αλληλεπιδραστική περίοδο λειτουργίας ασύγχρονα στο παρασκήνιο. Επίσης, διακόπτει την περίοδο λειτουργίας Spark και απελευθερώνει πόρους που καταλαμβάνονται από την περίοδο λειτουργίας, ώστε να είναι διαθέσιμοι σε άλλες περιόδους λειτουργίας στον ίδιο χώρο συγκέντρωσης.

Σημείωμα

Ο κώδικας μετά session.stop() δεν εκτελείται. Όλα τα δεδομένα και οι μεταβλητές στη μνήμη χάνονται μετά τη διακοπή της συνεδρίας. Αποθηκεύστε σημαντικά δεδομένα πριν καλέσετε session.stop().

Συμπεριφορά επιστροφής

Η stop() μέθοδος δεν επιστρέφει τιμή. Ξεκινά έναν ασύγχρονο τερματισμό της συνεδρίας.

Επανεκκίνηση του διερμηνέα Python

Χρησιμοποιήστε το notebookutils.session.restartPython() για επανεκκίνηση του διερμηνέα Python.

Σημείωμα

Στα σημειωματάρια restartPython() PySpark (Spark), επανεκκινεί μόνο τον διερμηνέα Python, διατηρώντας ανέπαφο το περιβάλλον Spark. Στα σημειωματάρια Python, τα οποία δεν έχουν περιβάλλον Spark, restartPython() επανεκκινείται ολόκληρη η διαδικασία Python.

notebookutils.session.restartPython()

Συμπεριφορά επιστροφής

Η restartPython() μέθοδος δεν επιστρέφει τιμή. Μετά την ολοκλήρωση της επανεκκίνησης, η εκτέλεση κώδικα συνεχίζεται στο επόμενο κελί.

Λάβετε υπόψη αυτές τις σκέψεις:

  • Στην περίπτωση εκτέλεσης αναφοράς σημειωματάριου, restartPython() επανεκκινεί μόνο τον διερμηνέα Python του τρέχοντος σημειωματαρίου στο οποίο γίνεται αναφορά. Δεν επηρεάζει το γονικό σημειωματάριο.
  • Σε σπάνιες περιπτώσεις, η εντολή μπορεί να αποτύχει λόγω του μηχανισμού ανάκλασης σπινθήρα. Η προσθήκη μιας επανάληψης μπορεί να μετριάσει το πρόβλημα.
  • Μετά την κλήση restartPython(), η εκτέλεση κώδικα συνεχίζεται στο επόμενο κελί. Εισαγάγετε πρόσφατα εγκατεστημένα πακέτα σε επόμενο κελί.

Μοτίβα χρήσης

Χαριτωμένος καθαρισμός πριν σταματήσετε

Χρησιμοποιήστε ένα try-finally μπλοκ για να διασφαλίσετε ότι η εκκαθάριση εκτελείται πριν από τη διακοπή της συνεδρίας:

try:
    print("Starting data processing...")
    # ... processing logic here ...

except Exception as e:
    print(f"Processing failed: {str(e)}")
    raise

finally:
    print("Performing cleanup...")
    try:
        notebookutils.fs.unmount("/mnt/data")
    except:
        pass

    notebookutils.session.stop()

Εγκαταστήστε πακέτα και επανεκκινήστε τον διερμηνέα

Μετά την εγκατάσταση νέων πακέτων με pip, επανεκκινήστε τον διερμηνέα Python ώστε τα πακέτα να είναι διαθέσιμα:

import subprocess
import sys

packages = ["pandas==2.0.0", "numpy==1.24.0"]

print("Installing packages...")
for package in packages:
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

print("Restarting Python interpreter...")
notebookutils.session.restartPython()

Σημείωμα

Μετά την κλήση restartPython(), η εκτέλεση κώδικα συνεχίζεται στο επόμενο κελί. Εισαγάγετε τα πρόσφατα εγκατεστημένα πακέτα σε ένα επόμενο κελί.

Ανάκτηση σφαλμάτων με επανεκκίνηση διερμηνέα

Εάν ο διερμηνέας Python φτάσει σε κατεστραμμένη κατάσταση, μπορείτε να επιχειρήσετε ανάκτηση επανεκκινώντας τον:

def recover_from_error():
    """Attempt to recover from errors by restarting Python."""

    try:
        test_value = 1 + 1
    except Exception as e:
        print(f"Python interpreter error: {str(e)}")
        print("Restarting Python interpreter...")
        notebookutils.session.restartPython()
        return False

    return True

if not recover_from_error():
    print("Recovery attempted - check next cell")

Εκκαθάριση πόρων πριν από τη διακοπή

Καθαρίστε τις προσαρτημένες διαδρομές, τα προσωρινά αρχεία και τα cache πριν τερματίσετε τη συνεδρία:

try:
    df = spark.range(0, 1000000)
    df.cache()
    result = df.count()
    print(f"Processing completed: {result}")

except Exception as e:
    print(f"Operation failed: {str(e)}")
    raise

finally:
    spark.catalog.clearCache()
    print("Stopping session to free resources...")
    notebookutils.session.stop()

Διακοπή υπό όρους μόνο για αλληλεπιδραστική λειτουργία

Ελέγξτε το περιβάλλον εκτέλεσης πριν σταματήσετε για να αποφύγετε περιττές κλήσεις σε λειτουργία διοχέτευσης:

context = notebookutils.runtime.context

if not context['isForPipeline']:
    print("Interactive mode: stopping session...")
    notebookutils.session.stop()
else:
    print("Pipeline mode: session stops automatically after execution")

Συμβουλή

Αποθηκεύετε πάντα σημαντικά αποτελέσματα—όπως εγγραφή DataFrames στον χώρο αποθήκευσης ή καταγραφή εξόδου—πριν καλέσετε session.stop() ή session.restartPython(). Και οι δύο λειτουργίες απορρίπτουν όλες τις καταστάσεις στη μνήμη.