☀️Siang
Python untuk IoT

Async Python: Pemrograman Asinkron untuk IoT

TOKEN

Pelajari cara membangun sistem IoT yang responsif dan efisien dengan pemrograman asinkron Python — asyncio, async/await, event loop, dan integrasi dengan MQTT serta database

Artikel: Python Async Artikel: Python Async


1. Sync vs Async: Perbedaan Mendasar

Dalam dunia IoT, perangkat sering kali perlu melakukan banyak hal bersamaan: membaca sensor, mengirim data ke server, menerima perintah dari MQTT, menyimpan ke database, dan memantau koneksi jaringan. Jika semua ini dilakukan secara sinkron (berurutan), sistem akan menjadi lambat dan tidak responsif.

Pemrograman asinkron memungkinkan program kita "menunggu" operasi yang lambat (jaringan, I/O) tanpa memblokir eksekusi keseluruhan. Saat satu operasi menunggu, operasi lain bisa berjalan.

Diagram: Sinkron vs Asinkron
SINKRON (Berurutan) ASINKRON (Bersamaan)
| Baca Sensor | | Baca Sensor |
| Kirim HTTP | | Kirim HTTP |
| Tunggu... | | Tunggu... |
| Terima Resp | | Baca Sensor 2 |
| Baca Sensor 2| | Terima Resp |
| Simpan DB | | Simpan DB |
| Tunggu... | | Tunggu... 8
| Terima Resp | | Terima Resp |
Total: ~8 detik Total: ~3 detik

Kapan Menggunakan Async?

Kondisi Rekomendasi
Banyak operasi I/O (HTTP, MQTT, database)✅ Gunakan async
Perlu handle banyak sensor secara bersamaan✅ Gunakan async
Server IoT perlu handle banyak client✅ Gunakan async
Operasi CPU-intensive (image processing, ML)⚠️ Gunakan multiprocessing
Program sederhana, satu tugas sekaligus❌ Cukup sinkron saja
Script one-shot (baca sekali, kirim, selesai)❌ Cukup sinkron saja
💡 Tips

Async bukan "lebih cepat" dari sinkron dalam hal kecepatan eksekusi per-baris kode. Keunggulannya adalah efisiensi waktu tunggu — saat satu operasi menunggu I/O, operasi lain bisa mulai. Ini sangat krusial di IoT di mana banyak sensor dan koneksi jaringan berjalan bersamaan.



2. Asyncio Basics

asyncio adalah library bawaan Python (sejak Python 3.4) yang menyediakan infrastruktur untuk menulis kode asinkron. Library ini menjadi fondasi dari ekosistem async Python — hampir semua library async modern (aiohttp, aiomqtt, aiosqlite) dibangun di atas asyncio.

2.1 — Konsep Dasar

Konsep Penjelasan
async defMendefinisikan coroutine — fungsi yang bisa dijalankan secara asinkron
awaitMenunggu coroutine selesai tanpa memblokir event loop
Event LoopMesin eksekusi asyncio yang mengatur kapan tiap coroutine berjalan
TaskCoroutine yang sudah dijadwalkan di event loop
asyncio.gather()Menjalankan beberapa coroutine secara bersamaan
asyncio.sleep()Tidur asinkron — tidak memblokir event loop

2.2 — Coroutine Pertama

Task A (baca sensor)

Waiting (I/O pending)

Task B (kirim HTTP)

Task C (simpan DB)

Blocking vs Non-Blocking: Kesalahan Umum

Diagram: Arsitektur Sistem IoT Async
Arsitektur Sistem IoT Async

DataProcessor (threshold)

StatusReport (setiap 10s)

Sensor Suhu (setiap 2s)

Sensor Lemb (setiap 3s) Sensor Gas (setiap 2.5s

Kirim Cloud (async)

Simpan DB (async)



9. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang async Python untuk IoT:

Pertanyaan 1: Apa yang terjadi jika menggunakan time.sleep() di dalam coroutine async?

a) Tidak ada efek, program tetap async
b) Event loop terblokir dan semua task terhambat
c) Python otomatis mengubahnya ke asyncio.sleep()
d) Menghasilkan SyntaxError

Pertanyaan 2: Fungsi apa yang digunakan untuk menjalankan beberapa coroutine secara bersamaan?

a) asyncio.run_all()
b) asyncio.gather()
c) asyncio.parallel()
d) asyncio.concurrent()

Pertanyaan 3: Library apa yang digunakan untuk HTTP requests asinkron di Python?

a) requests
b) urllib
c) aiohttp
d) httpx

Pertanyaan 4: Bagaimana cara menjalankan fungsi blocking (sinkron) di dalam async code tanpa memblokir event loop?

a) Menggunakan asyncio.sleep() sebelum fungsi blocking
b) Menggunakan asyncio.to_thread()
c) Menambah parameter async di depan def
d) Tidak bisa, harus rewrite semua ke async

Pertanyaan 5: Apa fungsi asyncio.create_task()?

a) Menjadwalkan coroutine untuk dijalankan di background
b) Membuat thread baru untuk menjalankan kode
c) Menghentikan event loop
d) Menghapus coroutine dari antrean eksekusi
🔍 Zoom
100%
🎨 Tema