Κοινή χρήση τεχνολογίας

Τι είναι οι κορουτίνες στην Python και πώς να εφαρμόσετε ασύγχρονο προγραμματισμό στην Python

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Κορουτίνα

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

Στην Python οι κορουτίνες περνούν κυρίωςasyncκαιawait Λέξεις-κλειδιά προς επίτευξη. Οι συναρτήσεις που ορίζονται χρησιμοποιώντας αυτές τις λέξεις-κλειδιά ονομάζονται "συναρτήσεις κορουτίνας" και δεν εκτελούνται αμέσως όταν καλούνται, αλλά επιστρέφουν ένα αντικείμενο κορουτίνας. Αυτό το αντικείμενο κορουτίνας πρέπει να προγραμματιστεί για εκτέλεση στον βρόχο συμβάντος.

Ασύγχρονος Προγραμματισμός

Ο ασύγχρονος προγραμματισμός είναι ένα μοντέλο συγχρονισμού που επιτρέπει σε ένα πρόγραμμα να συνεχίσει να εκτελεί άλλες εργασίες ενώ περιμένει να ολοκληρωθούν ορισμένες μακροχρόνιες λειτουργίες (όπως λειτουργίες I/O). Στην Python, ο ασύγχρονος προγραμματισμός χρησιμοποιείται συχνά με κορουτίνες, των οποίων η εκτέλεση προγραμματίζεται μέσω ενός βρόχου συμβάντων.

Πώς να εφαρμόσετε ασύγχρονο προγραμματισμό στην Python

1. Χρήσηasyncκαιawait
  • Ορίστε τη συνάρτηση κορουτίνας:χρήσηasync defγια να ορίσετε τη συνάρτηση κορουτίνας.
  • Περιμένετε για κορουτίνα: Μέσα στη λειτουργία κορουτίνας, μπορείτε να χρησιμοποιήσετεawaitνα περιμένετε να ολοκληρωθεί μια άλλη κορουτίνα ή ασύγχρονη λειτουργία.
2. Χρησιμοποιήστε βρόχο συμβάντων
  • Πύθωνasyncio Η βιβλιοθήκη παρέχει μια υλοποίηση του βρόχου συμβάντων. Πρέπει να βεβαιωθείτε ότι ο ασύγχρονος κώδικάς σας εκτελείται σε κάποιο βρόχο συμβάντων.
  • χρήσηasyncio.run(main())για να εκτελέσετε την κύρια συνάρτηση κορουτίνας, η οποία δημιουργεί και διαχειρίζεται αυτόματα τον βρόχο συμβάντος.
3. Δείγμα κώδικα
 

python复制代码

import asyncio
# 定义一个异步函数,模拟一个耗时的I/O操作
async def fetch_data(url):
print(f"Fetching {url}...")
# 模拟耗时操作
await asyncio.sleep(1)
return f"Data from {url}"
async def main():
# 同时启动多个异步任务
task1 = asyncio.create_task(fetch_data('http://example.com/data1'))
task2 = asyncio.create_task(fetch_data('http://example.com/data2'))
# 等待所有任务完成
result1, result2 = await asyncio.gather(task1, task2)
print(result1)
print(result2)
# 运行主协程
asyncio.run(main())

Σε αυτό το παράδειγμα,fetch_dataΕίναι μια ασύγχρονη συνάρτηση που προσομοιώνει αιτήματα δικτύου.mainΣτη συνάρτηση ξεκινήσαμε δύο ταυτόχροναfetch_dataμια ασύγχρονη εργασία και χρήσηawait asyncio.gather()Περιμένετε να τελειώσουν ταυτόχρονα.

4. Προφυλάξεις
  • Ο ασύγχρονος προγραμματισμός και οι κορουτίνες διευκολύνουν την αντιμετώπιση του συγχρονισμού, αλλά και εισάγουν νέες πολυπλοκότητες όπως η ασύγχρονη διαχείριση περιβάλλοντος, ο χειρισμός σφαλμάτων κ.λπ.
  • Όταν σχεδιάζετε ασύγχρονο κώδικα, δώστε ιδιαίτερη προσοχή στις λειτουργίες που μπλοκάρουν (για παράδειγμα, σύγχρονες λειτουργίες εισόδου/εξόδου) και χρησιμοποιήστε ασύγχρονες εκδόσεις βιβλιοθηκών και API όποτε είναι δυνατόν.
  • asyncio Είναι μέρος της βασικής βιβλιοθήκης Python και χρησιμοποιείται για την υποστήριξη κορουτινών και ασύγχρονου προγραμματισμού.Παρέχει επίσης πλούσιο API όπως π.χasyncio.Queueasyncio.Lockκ.λπ., για το χειρισμό ζητημάτων συγχρονισμού και συγχρονισμού σε ασύγχρονο κώδικα.