τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Η κορουτίνα είναι ένα στοιχείο προγράμματος που επιτρέπει σε πολλαπλά σημεία εισόδου σε ένα πρόγραμμα να αναστείλουν και να συνεχίσουν την εκτέλεση σε συγκεκριμένες τοποθεσίες. Σε αντίθεση με τα νήματα και τις διεργασίες, η εναλλαγή κορουτίνας ελέγχεται ρητά από τον προγραμματιστή και όχι προγραμματισμένη από το λειτουργικό σύστημα. Αυτό καθιστά την κορουτίνα πιο ελαφριά κατά την εκτέλεση εναλλαγών περιβάλλοντος, καθώς δεν υπάρχει ανάγκη αποθήκευσης και επαναφοράς ολόκληρου του περιβάλλοντος εκτέλεσης (όπως η στοίβα νημάτων).
Στην Python οι κορουτίνες περνούν κυρίωςasync
καιawait
Λέξεις-κλειδιά προς επίτευξη. Οι συναρτήσεις που ορίζονται χρησιμοποιώντας αυτές τις λέξεις-κλειδιά ονομάζονται "συναρτήσεις κορουτίνας" και δεν εκτελούνται αμέσως όταν καλούνται, αλλά επιστρέφουν ένα αντικείμενο κορουτίνας. Αυτό το αντικείμενο κορουτίνας πρέπει να προγραμματιστεί για εκτέλεση στον βρόχο συμβάντος.
Ο ασύγχρονος προγραμματισμός είναι ένα μοντέλο συγχρονισμού που επιτρέπει σε ένα πρόγραμμα να συνεχίσει να εκτελεί άλλες εργασίες ενώ περιμένει να ολοκληρωθούν ορισμένες μακροχρόνιες λειτουργίες (όπως λειτουργίες I/O). Στην Python, ο ασύγχρονος προγραμματισμός χρησιμοποιείται συχνά με κορουτίνες, των οποίων η εκτέλεση προγραμματίζεται μέσω ενός βρόχου συμβάντων.
async
καιawait
async def
για να ορίσετε τη συνάρτηση κορουτίνας.await
να περιμένετε να ολοκληρωθεί μια άλλη κορουτίνα ή ασύγχρονη λειτουργία.asyncio
Η βιβλιοθήκη παρέχει μια υλοποίηση του βρόχου συμβάντων. Πρέπει να βεβαιωθείτε ότι ο ασύγχρονος κώδικάς σας εκτελείται σε κάποιο βρόχο συμβάντων.asyncio.run(main())
για να εκτελέσετε την κύρια συνάρτηση κορουτίνας, η οποία δημιουργεί και διαχειρίζεται αυτόματα τον βρόχο συμβάντος.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()
Περιμένετε να τελειώσουν ταυτόχρονα.
asyncio
Είναι μέρος της βασικής βιβλιοθήκης Python και χρησιμοποιείται για την υποστήριξη κορουτινών και ασύγχρονου προγραμματισμού.Παρέχει επίσης πλούσιο API όπως π.χasyncio.Queue
、asyncio.Lock
κ.λπ., για το χειρισμό ζητημάτων συγχρονισμού και συγχρονισμού σε ασύγχρονο κώδικα.