3 ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος της Python - KDnuggets

3 Ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος της Python – KDnuggets

Κόμβος πηγής: 3084989

3 Ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος της Python
Εικόνα από johnstocker στο Freepik
 

Πριν από λίγο έγραψα ένα tutorial για γράφοντας αποτελεσματικό κώδικα Python. Σε αυτό, μίλησα για τη χρήση των διαχειριστών περιβάλλοντος και της δήλωσης με για την αποτελεσματική διαχείριση των πόρων.

Χρησιμοποίησα ένα απλό παράδειγμα χειρισμού αρχείων για να δείξω πώς τα αρχεία κλείνουν αυτόματα όταν η εκτέλεση εξέρχεται από το μπλοκ με — ακόμα κι αν υπάρχει εξαίρεση.

Ενώ ο χειρισμός αρχείων είναι ένα καλό πρώτο παράδειγμα, μπορεί γρήγορα να γίνει βαρετός. Αυτός είναι ο λόγος για τον οποίο θα ήθελα να εξετάσω άλλες ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος —πέρα από το χειρισμό αρχείων— σε αυτό το σεμινάριο. Θα επικεντρωθούμε στον χειρισμό των συνδέσεων βάσεων δεδομένων, στη διαχείριση υποδιαδικασιών και στην αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας.

Οι διαχειριστές περιβάλλοντος στην Python σάς επιτρέπουν να γράφετε καθαρότερο κώδικα όταν εργάζεστε με πόρους. Παρέχουν μια συνοπτική σύνταξη για τη ρύθμιση και την εξάλειψη πόρων μέσω:

  • An εισάγετε λογική που καλείται όταν η εκτέλεση μπαίνει στο πλαίσιο και
  • An έξοδος λογικά καλείται όταν η εκτέλεση βγαίνει από το περιβάλλον 

Το απλούστερο παράδειγμα αυτού είναι ο χειρισμός αρχείων. Εδώ χρησιμοποιούμε το open() λειτουργία στο with δήλωση για να αποκτήσετε ένα πρόγραμμα χειρισμού αρχείων:

with open('filename.txt', 'w') as file:
    file.write('Something random')

 

Αυτό αποκτά τον πόρο - το αντικείμενο αρχείου - που χρησιμοποιείται (γράφουμε στο αρχείο) μέσα στο μπλοκ κώδικα. Το αρχείο κλείνει μόλις η εκτέλεση βγει από το περιβάλλον. έτσι δεν υπάρχουν διαρροές πόρων.

Μπορείτε να γράψετε τη γενική έκδοση αυτού ως εξής:

with some_context() as ctx:
    # do something useful on the resource!

# resource cleanup is automatic

 

Τώρα ας προχωρήσουμε στα συγκεκριμένα παραδείγματα.

Όταν δημιουργείτε εφαρμογές Python, είναι πολύ συνηθισμένο να συνδέεστε σε βάσεις δεδομένων και να κάνετε ερωτήσεις στους πίνακες που περιέχουν. Και η ροή εργασίας για να γίνει αυτό θα μοιάζει με αυτό:

  • Εγκαταστήστε το σύνδεσμο βάσης δεδομένων για να εργαστείτε με τη βάση δεδομένων (όπως το psycopg2 για Postgres και το mysql-connector-python για βάσεις δεδομένων MySQL).
  • Αναλύστε το αρχείο διαμόρφωσης για να ανακτήσετε τις παραμέτρους σύνδεσης. 
  • Χρησιμοποιήστε το connect() λειτουργία για τη δημιουργία σύνδεσης με τη βάση δεδομένων.

 

3 Ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος της Python
Σύνδεση στο db | Εικόνα από τον συγγραφέα
 

Αφού συνδεθείτε στη βάση δεδομένων, μπορείτε να δημιουργήσετε μια βάση δεδομένων για να υποβάλετε ερωτήματα στη βάση δεδομένων. Εκτελέστε ερωτήματα και ανακτήστε τα αποτελέσματα του ερωτήματος χρησιμοποιώντας τις μεθόδους εκτέλεσης και ανάκτησης του δρομέα.

 

3 Ενδιαφέρουσες χρήσεις των διαχειριστών περιβάλλοντος της Python
Ερώτηση για το db | Εικόνα από τον συγγραφέα
 

Με αυτόν τον τρόπο, δημιουργείτε τους ακόλουθους πόρους: μια σύνδεση βάσης δεδομένων και έναν δρομέα βάσης δεδομένων. Τώρα ας κωδικοποιήσουμε ένα απλό γενικό παράδειγμα για να δούμε πώς μπορούμε να χρησιμοποιήσουμε τη σύνδεση και τα αντικείμενα του δρομέα ως διαχειριστές περιβάλλοντος.

Ανάλυση αρχείων TOML στην Python

Εξετάστε ένα δείγμα αρχείου TOML, ας πούμε db_config.toml, που περιέχει τις απαιτούμενες πληροφορίες για να συνδεθείτε στη βάση δεδομένων:

# db_config.toml

[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"

 

Note: Χρειάζεστε Python 3.11 ή νεότερη έκδοση για χρήση tomllib.

 

Η Python έχει ενσωματωμένο tomllib ενότητα (που εισήχθη στην Python 3.11) που σας επιτρέπει να αναλύετε αρχεία TOML. Έτσι, μπορείτε να ανοίξετε το αρχείο db_config.toml και να αναλύσετε τα περιεχόμενά του ως εξής:

import tomllib

with open('db_config.toml','rb') as file:
	credentials = tomllib.load(file)['database']

 

Παρατηρήστε ότι πατάμε στην ενότητα «βάση δεδομένων» του αρχείου db_config.toml. ο load() Η συνάρτηση επιστρέφει ένα λεξικό Python. Μπορείτε να το επαληθεύσετε εκτυπώνοντας τα περιεχόμενα του credentials:

print(credentials)

 

Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}

Σύνδεση στη βάση δεδομένων

Ας υποθέσουμε ότι θέλετε να συνδεθείτε σε μια βάση δεδομένων Postgres. Μπορείτε να εγκαταστήσετε το υποδοχή psycopg2 χρησιμοποιώντας pip:

pip install psycopg2

 

Μπορείτε να χρησιμοποιήσετε τόσο τη σύνδεση όσο και τα αντικείμενα του δρομέα με δηλώσεις όπως φαίνεται:

import psycopg2

# Connect to the database
with psycopg2.connect(**credentials) as conn:
	# Inside this context, the connection is open and managed

	with conn.cursor() as cur:
    	# Inside this context, the cursor is open and managed

    	cur.execute('SELECT * FROM my_table')
    	result = cur.fetchall()
            print(result)

 

Σε αυτόν τον κώδικα:

  • Χρησιμοποιούμε το with δήλωση για τη δημιουργία ενός περιβάλλοντος για τη διαχείριση της σύνδεσης της βάσης δεδομένων. 
  • Μέσα σε αυτό το πλαίσιο, δημιουργούμε ένα άλλο περιβάλλον για τη διαχείριση του δρομέα της βάσης δεδομένων. Ο κέρσορας κλείνει αυτόματα κατά την έξοδο από αυτό το εσωτερικό περιβάλλον.
  • Επειδή η σύνδεση είναι επίσης κλειστή κατά την έξοδο από το εξωτερικό περιβάλλον, αυτή η κατασκευή διασφαλίζει τη σωστή διαχείριση τόσο της σύνδεσης όσο και του δρομέα—μειώνοντας την πιθανότητα διαρροών πόρων.

Μπορείτε επίσης να χρησιμοποιήσετε μια παρόμοια κατασκευή όταν εργάζεστε με βάσεις δεδομένων SQLite και MySQL.

Η υποδιεργασία της Python παρέχει λειτουργικότητα για την εκτέλεση εξωτερικών εντολών μέσα σε ένα σενάριο Python. ο subprocess.Popen() ο κατασκευαστής δημιουργεί μια νέα υποδιεργασία. Το οποίο μπορείτε να χρησιμοποιήσετε σε α with δήλωση όπως αυτή:

import subprocess

# Run an external command and capture its output
with subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True) as process:
	output, _ = process.communicate()
	print(output)

 

Εδώ, εκτελούμε την εντολή Bash ls -l εντολή για μεγάλη λίστα των αρχείων στον τρέχοντα κατάλογο:

Output >>>

total 4
-rw-rw-r-- 1 balapriya balapriya   0 Jan  5 18:31 db_info.toml
-rw-rw-r-- 1 balapriya balapriya 267 Jan  5 18:32 main.py

 

Οι πόροι που σχετίζονται με την υποδιεργασία ελευθερώνονται μόλις η εκτέλεση εξέλθει από το περιβάλλον της with δήλωση. 

Ο ενσωματωμένος τύπος δεδομένων float στην Python δεν είναι κατάλληλος για αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας. Χρειάζεστε όμως υψηλή ακρίβεια όταν εργάζεστε με οικονομικά δεδομένα, μετρήσεις αισθητήρων και παρόμοια. Για τέτοιες εφαρμογές, μπορείτε να χρησιμοποιήσετε το δεκαδικός αντ' αυτού. 

Η localcontext() λειτουργία επιστρέφει έναν διαχειριστή περιβάλλοντος. Έτσι μπορείτε να χρησιμοποιήσετε το localcontext() λειτουργία στο with δήλωση και ορίστε την ακρίβεια για το τρέχον περιβάλλον χρησιμοποιώντας όπως φαίνεται:

from decimal import Decimal, localcontext

with localcontext() as cur_context:
    cur_context.prec = 40
    a = Decimal(2)
    b = Decimal(3)
    print(a/b)

 

Εδώ είναι η έξοδος:

Output >>>
0.6666666666666666666666666666666666666667

 

Εδώ, η ακρίβεια ορίζεται σε 40 δεκαδικά ψηφία — αλλά μόνο εντός αυτού with ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ. Όταν η εκτέλεση εξέρχεται από το τρέχον περιβάλλον, η ακρίβεια επαναφέρεται στην προεπιλεγμένη ακρίβεια (των 28 δεκαδικών ψηφίων).

Σε αυτό το σεμινάριο, μάθαμε πώς οι διαχειριστές περιβάλλοντος μπορούν να χρησιμοποιηθούν για το χειρισμό συνδέσεων βάσεων δεδομένων, τη διαχείριση υποδιαδικασιών και πλαισίων σε αριθμητική κινητής υποδιαστολής υψηλής ακρίβειας.

Στο επόμενο σεμινάριο, θα δούμε πώς μπορούμε να δημιουργήσουμε προσαρμοσμένους διαχειριστές περιβάλλοντος στην Python. Μέχρι τότε, καλή κωδικοποίηση!
 
 

Bala Priya C είναι προγραμματιστής και τεχνικός συγγραφέας από την Ινδία. Της αρέσει να εργάζεται στη διασταύρωση των μαθηματικών, του προγραμματισμού, της επιστήμης δεδομένων και της δημιουργίας περιεχομένου. Οι τομείς ενδιαφέροντος και εξειδίκευσής της περιλαμβάνουν τα DevOps, την επιστήμη δεδομένων και την επεξεργασία φυσικής γλώσσας. Της αρέσει να διαβάζει, να γράφει, να κωδικοποιεί και τον καφέ! Επί του παρόντος, εργάζεται για να μάθει και να μοιράζεται τις γνώσεις της με την κοινότητα προγραμματιστών, γράφοντας σεμινάρια, οδηγούς με οδηγίες, απόψεις και πολλά άλλα.

Σφραγίδα ώρας:

Περισσότερα από KDnuggets