0Pricing
Python Academy · Pelajaran

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, Alice

Siklus 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 forever

Titik 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 coroutine

Mode 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.py

Pemeriksaan 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

  1. Coroutine dan Event Loop
  2. await, Task, dan Pengumpulan
  3. Pengelola Konteks dan Iterator Asinkron
  4. Pola I/O Asinkron dalam Produksi
← Kembali ke Python Academy