await, Task, dan Pengumpulan
Gunakan await, asyncio.create_task, dan asyncio.gather untuk konkurensi.
await, Task, dan Pengumpulan adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
await vs Berurutan
Menggunakan await saja akan menjalankan korutin secara berurutan. Untuk menjalankannya secara bersamaan, bungkus korutin tersebut dalam tugas.
import asyncio
async def main():
# Sequential — total ~3 s
await asyncio.sleep(2)
await asyncio.sleep(1)
# Concurrent using gather — total ~2 s
await asyncio.gather(asyncio.sleep(2), asyncio.sleep(1))asyncio.create_task()
asyncio.create_task(coro) menjadwalkan korutin untuk berjalan sebagai tugas independen secara bersamaan dengan korutin saat ini.
import asyncio
async def work(n):
await asyncio.sleep(n)
return n
async def main():
t1 = asyncio.create_task(work(2))
t2 = asyncio.create_task(work(1))
r1 = await t1
r2 = await t2
print(r1, r2) # 2 1 (total ~2 s)
asyncio.run(main())asyncio.gather()
asyncio.gather(*coros) menjalankan korutin secara bersamaan dan mengembalikan semua hasil sesuai urutan setelah semuanya selesai.
import asyncio
async def fetch(i):
await asyncio.sleep(1)
return f"data-{i}"
async def main():
results = await asyncio.gather(fetch(1), fetch(2), fetch(3))
print(results) # ["data-1", "data-2", "data-3"] in ~1 s
asyncio.run(main())gather dengan return_exceptions
Atur return_exceptions=True agar korutin yang gagal mengembalikan pengecualiannya sebagai hasil, bukan membatalkan seluruh operasi gather.
import asyncio
async def risky(n):
if n == 2: raise ValueError("bad")
return n
async def main():
results = await asyncio.gather(
risky(1), risky(2), risky(3),
return_exceptions=True
)
print(results) # [1, ValueError("bad"), 3]asyncio.wait()
asyncio.wait(tasks, return_when=...) mengembalikan dua himpunan: done dan pending. Gunakan FIRST_COMPLETED untuk merespons hasil pertama.
import asyncio
async def slow(): await asyncio.sleep(3); return "slow"
async def fast(): await asyncio.sleep(1); return "fast"
async def main():
tasks = {asyncio.create_task(slow()), asyncio.create_task(fast())}
done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
for t in pending: t.cancel()Pembatalan Tugas
Panggil task.cancel() untuk meminta pembatalan. Tugas menerima asyncio.CancelledError pada titik await berikutnya.
import asyncio
async def long_job():
try:
await asyncio.sleep(100)
except asyncio.CancelledError:
print("Cancelled!")
raise # re-raise is required
async def main():
t = asyncio.create_task(long_job())
await asyncio.sleep(1)
t.cancel()
await tasyncio.timeout() — Python 3.11+
Bungkus operasi await dengan asyncio.timeout(seconds) untuk membatalkan operasi jika berlangsung terlalu lama.
import asyncio
async def main():
try:
async with asyncio.timeout(2):
await asyncio.sleep(10) # too slow
except TimeoutError:
print("Timed out!")asyncio.wait_for()
Pada Python < 3.11, gunakan asyncio.wait_for(coro, timeout=N) untuk menambahkan batas waktu, yang akan memunculkan asyncio.TimeoutError.
import asyncio
async def slow(): await asyncio.sleep(5)
async def main():
try:
await asyncio.wait_for(slow(), timeout=2)
except asyncio.TimeoutError:
print("Timed out")Nama dan Pemeriksaan Tugas
Beri nama tugas agar proses penelusuran kesalahan lebih mudah dengan asyncio.create_task(coro, name="..."), lalu periksa namanya dengan task.get_name().
import asyncio
async def worker(): await asyncio.sleep(1)
async def main():
t = asyncio.create_task(worker(), name="worker-1")
print(t.get_name()) # worker-1
await tTaskGroup — Python 3.11+
asyncio.TaskGroup membuat kelompok tugas terstruktur. Jika tugas mana pun memunculkan pengecualian, semua tugas akan dibatalkan.
import asyncio
async def main():
async with asyncio.TaskGroup() as tg:
t1 = tg.create_task(asyncio.sleep(1))
t2 = tg.create_task(asyncio.sleep(2))
# all tasks done hereSemafor untuk Pembatasan Laju
Gunakan asyncio.Semaphore(n) untuk membatasi jumlah operasi bersamaan, misalnya panggilan API.
import asyncio
sem = asyncio.Semaphore(5) # max 5 concurrent
async def limited_fetch(url):
async with sem:
await fetch(url) # at most 5 at a timePemeriksaan Singkat
Apa perbedaan antara await coro() dan asyncio.create_task(coro())?
Ringkasan
Gunakan create_task atau gather untuk eksekusi bersamaan. gather mengumpulkan semua hasil; wait memberikan kontrol yang lebih terperinci. Batalkan tugas dengan .cancel() dan terapkan batas waktu dengan wait_for atau asyncio.timeout.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “await, Task, dan Pengumpulan” gratis?
Ya — teks lengkap “await, Task, dan Pengumpulan” 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 “await, Task, dan Pengumpulan”?
Gunakan await, asyncio.create_task, dan asyncio.gather untuk konkurensi. 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 2 dari 4.
Berapa lama pelajaran “await, Task, dan Pengumpulan” 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