Coroutine dan Event Loop
Definisikan coroutine dengan async def dan jalankan dengan asyncio.run().
Coroutine dan Event Loop adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Apa Itu Konkurensi?
Asyncio menyediakan konkurensi kooperatif: satu utas menangani banyak tugas dengan berpindah di antara tugas-tugas tersebut setiap kali salah satunya menunggu I/O.
# Traditional: blocking I/O holds the whole thread
# Asyncio: while waiting for I/O, run other coroutines
import asyncio
async def main():
print("Hello")
await asyncio.sleep(1) # yield control
print("World")
asyncio.run(main())async def — Fungsi Korutin
Fungsi yang didefinisikan dengan async def adalah fungsi korutin. Pemanggilannya mengembalikan objek korutin; fungsi tersebut hanya dieksekusi saat ditunggu atau dijadwalkan.
import asyncio
async def greet(name):
return f"Hello, {name}"
result = asyncio.run(greet("Alice"))
print(result) # Hello, AliceSiklus Peristiwa
Siklus peristiwa menggerakkan eksekusi korutin. asyncio.run(coro) membuat siklus peristiwa baru, menjalankan korutin hingga selesai, lalu menutup siklus tersebut.
import asyncio
async def compute():
await asyncio.sleep(0)
return 42
value = asyncio.run(compute())
print(value) # 42
# For advanced use:
loop = asyncio.new_event_loop()
result = loop.run_until_complete(compute())
loop.close()await Menjeda Eksekusi
await expr menangguhkan korutin saat ini hingga expr (korutin lain atau future) selesai. Sementara itu, siklus peristiwa menjalankan tugas lain.
import asyncio
async def task(name, delay):
print(f"{name} starting")
await asyncio.sleep(delay)
print(f"{name} done")
async def main():
await task("A", 2)
await task("B", 1) # sequential here
asyncio.run(main())asyncio.sleep()
asyncio.sleep(seconds) menangguhkan korutin saat ini selama waktu yang ditentukan tanpa memblokir siklus peristiwa.
import asyncio
async def heartbeat():
while True:
print("ping")
await asyncio.sleep(1)
# asyncio.run(heartbeat()) # runs foreverTitik Masuk asyncio.run()
asyncio.run(coro) adalah titik masuk tingkat atas standar. Jangan pernah memanggilnya dari dalam siklus peristiwa yang sedang berjalan.
import asyncio
async def main():
print("running")
if __name__ == "__main__":
asyncio.run(main())Memeriksa Apakah Berada di Dalam Siklus Peristiwa
Gunakan asyncio.get_running_loop() untuk mendeteksi apakah suatu siklus sudah berjalan (menimbulkan RuntimeError jika belum).
import asyncio
async def inner():
loop = asyncio.get_running_loop()
print(f"Loop: {loop}")
asyncio.run(inner())Menjalankan Kode yang Menghalangi
Jalankan kode yang terikat CPU atau kode I/O yang menghalangi tanpa memblokir siklus peristiwa menggunakan loop.run_in_executor(None, func, *args).
import asyncio, time
def blocking():
time.sleep(2)
return "done"
async def main():
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(None, blocking)
print(result)
asyncio.run(main())Perantaian Korutin
Korutin dapat melakukan await pada korutin lain sehingga membentuk rantai. Alur kendali mengalir turun melalui rantai dan kembali naik saat setiap tingkat selesai.
import asyncio
async def fetch_data():
await asyncio.sleep(1)
return {"value": 42}
async def process():
data = await fetch_data()
return data["value"] * 2
async def main():
result = await process()
print(result) # 84
asyncio.run(main())Mengidentifikasi Korutin
Gunakan asyncio.iscoroutine(obj) atau asyncio.iscoroutinefunction(func) untuk memeriksa fungsi asinkron saat runtime.
import asyncio
async def my_coro():
pass
print(asyncio.iscoroutinefunction(my_coro)) # True
coro = my_coro()
print(asyncio.iscoroutine(coro)) # True
coro.close() # clean up the un-awaited coroutineMode Penelusuran Kesalahan asyncio
Aktifkan mode penelusuran kesalahan untuk mendeteksi korutin yang tidak ditunggu, panggilan balik yang lambat, dan masalah lainnya: atur PYTHONASYNCIODEBUG=1 atau berikan debug=True ke asyncio.run.
import asyncio
async def main():
pass
asyncio.run(main(), debug=True)
# Or:
# PYTHONASYNCIODEBUG=1 python script.pyPemeriksaan Cepat
Apa yang dilakukan oleh asyncio.run(coro)?
Ringkasan
Tentukan korutin dengan async def, jalankan dengan asyncio.run(), dan tangguhkan dengan await. Siklus peristiwa menjadwalkan korutin secara kooperatif, dengan menjalankan korutin lain saat salah satunya menunggu I/O.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Coroutine dan Event Loop” gratis?
Ya — teks lengkap “Coroutine dan Event Loop” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Coroutine dan Event Loop”?
Definisikan coroutine dengan async def dan jalankan dengan asyncio.run(). Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Coroutine dan Event Loop” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Coroutine dan Event Loop
- await, Task, dan Pengumpulan
- Pengelola Konteks dan Iterator Asinkron
- Pola I/O Asinkron dalam Produksi