Belajar Asynchronous di Python: Panduan aiohttp untuk Pemula Anti Pusing

Belajar Asynchronous di Python: Panduan aiohttp untuk Pemula Anti Pusing

Di dunia pemrograman, efisiensi adalah raja. Salah satu cara paling ampuh untuk membuat aplikasi, terutama yang berhubungan dengan jaringan seperti web scraping atau mengakses API, menjadi super cepat adalah dengan menggunakan pemrograman asynchronous. Bagi pemula di Python, konsep ini mungkin terdengar rumit dan memusingkan. Namun, jangan khawatir. Dengan library yang tepat seperti aiohttp, belajar asynchronous bisa menjadi pengalaman yang menyenangkan. Artikel ini akan menjadi panduan lengkap untuk memahami dasar-dasar asynchronous di Python dan cara menggunakan aiohttp untuk melakukan permintaan jaringan tanpa pusing.

Bayangkan Anda harus mengunduh seratus gambar dari internet. Secara tradisional (sinkronus), program Anda akan mengunduh gambar pertama, menunggunya selesai, lalu mengunduh gambar kedua, menunggu lagi, dan begitu seterusnya. Waktu tunggu saat proses unduhan menjadi waktu yang terbuang sia-sia. Pemrograman asynchronous mengubah permainan ini. Ia memungkinkan program Anda untuk memulai unduhan gambar pertama, dan sambil menunggu unduhan itu selesai, ia bisa memulai unduhan gambar kedua, ketiga, dan seterusnya. Dengan cara ini, banyak pekerjaan dapat dilakukan secara bersamaan, memangkas waktu eksekusi secara drastis. Inilah keajaiban yang ditawarkan oleh aiohttp.

Baca juga: Developer Web Wajib Lirik OnsenUI, Bikin Aplikasi Hybrid Jadi Lebih Seru

Kenapa Harus Asynchronous? Analogi Pesan Kopi

Untuk memahami konsep asynchronous dengan mudah, mari kita gunakan analogi sebuah kedai kopi.

  • Cara Sinkronus (Tradisional): Anda datang ke kasir, memesan secangkir latte. Kasir kemudian berhenti melayani pelanggan lain, berjalan ke mesin kopi, membuat latte Anda dari awal sampai akhir, lalu memberikannya kepada Anda. Baru setelah itu, ia akan melayani pelanggan berikutnya. Jika membuat satu latte butuh 5 menit, pelanggan kelima harus menunggu 20 menit hanya untuk bisa memesan. Sangat tidak efisien, bukan? Inilah cara kerja library seperti requests di Python.
  • Cara Asynchronous: Anda datang ke kasir, memesan latte, dan langsung membayar. Kasir memberikan pesanan Anda ke barista dan langsung melayani pelanggan berikutnya. Sementara itu, barista membuat pesanan Anda. Anda bisa duduk manis sambil menunggu nama Anda dipanggil. Kasir tidak terblokir dan bisa terus menerima pesanan lain. Barista pun bisa mengerjakan beberapa pesanan secara paralel. Inilah filosofi di balik asynchronous. Program Anda tidak “terblokir” menunggu satu tugas selesai; ia bisa beralih mengerjakan tugas lain yang sudah siap.

Dalam dunia pemrograman, “menunggu” ini bisa berupa menunggu respons dari sebuah server, membaca file dari hard disk, atau menunggu database mengembalikan data. Semua ini adalah operasi I/O (Input/Output bound), di mana asynchronous akan bersinar paling terang.

Mengenal async, await, dan asyncio

Sebelum terjun ke aiohttp, kita perlu berkenalan dengan tiga pilar utama asynchronous di Python:

  1. asyncio: Ini adalah library bawaan Python yang menjadi fondasi untuk menjalankan kode asynchronous. asyncio menyediakan event loop, semacam manajer yang bertugas mengatur dan menjadwalkan tugas-tugas asynchronous mana yang harus dijalankan.
  2. async def: Ini adalah cara kita mendefinisikan sebuah fungsi asynchronous atau yang disebut juga coroutine. Fungsi ini tidak langsung berjalan saat dipanggil, melainkan mengembalikan sebuah objek coroutine yang bisa dijalankan oleh event loop.
  3. await: Kata kunci ini hanya bisa digunakan di dalam fungsi async def. await memberitahu event loop: “Hei, aku akan menjalankan tugas yang butuh waktu tunggu (misalnya, meminta data ke API). Sambil menunggu, silakan kerjakan tugas lain yang sudah siap.” Ketika tugas yang ditunggu selesai, event loop akan kembali dan melanjutkan eksekusi dari titik tersebut.

Kombinasi ketiganya memungkinkan kita menulis kode yang terlihat seperti kode sinkronus biasa, tetapi berjalan dengan cara yang jauh lebih efisien.

Perkenalkan aiohttp: Si Jagoan Networking Asynchronous

Jika requests adalah raja library HTTP untuk pemrograman sinkronus, maka aiohttp adalah rajanya di dunia asynchronous. aiohttp adalah library yang menyediakan klien HTTP dan juga server web yang dibangun di atas asyncio. Ia dirancang dari dasar untuk menjadi non-blocking, memungkinkannya menangani ribuan koneksi secara bersamaan dengan sangat efisien.

Dengan aiohttp, Anda bisa melakukan semua hal yang biasa Anda lakukan dengan requests, seperti mengirim permintaan GET, POST, PUT, menambahkan header, dan mengelola session, tetapi semuanya dilakukan dengan cara asynchronous. Ini menjadikannya pilihan ideal untuk aplikasi yang melakukan banyak sekali permintaan jaringan, seperti:

  • Web Scraper: Mengumpulkan data dari ratusan halaman web secara bersamaan.
  • API Client: Berinteraksi dengan banyak microservice atau API eksternal dengan cepat.
  • Bot: Membuat bot untuk Telegram, Discord, atau platform lain yang perlu merespons banyak permintaan secara real-time.

Praktik Langsung: Mengirim Request dengan aiohttp

Teori saja tidak cukup, mari kita langsung coba praktik. Pertama, pastikan Anda sudah menginstal aiohttp.

Bash

pip install aiohttp

Sekarang, mari kita buat program sederhana untuk mengambil data dari JSONPlaceholder, sebuah API publik untuk pengujian.

Python

import asyncio
import aiohttp

async def main():
    # Membuat session client dalam blok 'async with'
    # Ini memastikan session akan ditutup secara otomatis
    async with aiohttp.ClientSession() as session:
        
        # URL API yang akan kita akses
        url = 'https://jsonplaceholder.typicode.com/posts/1'
        
        # Mengirim permintaan GET dengan 'await'
        # Program akan "berhenti" di sini sambil menunggu server merespons
        # tapi event loop bisa mengerjakan tugas lain
        async with session.get(url) as response:
            
            # Mencetak status code dari respons
            print("Status:", response.status)
            
            # Membaca isi respons sebagai JSON dengan 'await'
            data = await response.json()
            print("Judul Post:", data['title'])

# Menjalankan fungsi main() menggunakan event loop asyncio
# Di Python 3.7+, cara ini adalah yang paling sederhana
if __name__ == "__main__":
    asyncio.run(main())

Mari kita bedah kode di atas:

  1. import asyncio dan import aiohttp adalah langkah pertama untuk mengimpor library yang kita butuhkan.
  2. Fungsi main kita definisikan dengan async def, menandakan ini adalah sebuah coroutine.
  3. aiohttp.ClientSession() digunakan untuk membuat sebuah session. Menggunakan async with adalah praktik terbaik karena ia akan menangani koneksi dan menutupnya secara otomatis.
  4. session.get(url) adalah cara kita melakukan permintaan GET. Perhatikan penggunaan await di depannya (sebenarnya, async with adalah bentuk lain dari await). Ini adalah titik di mana program akan menunggu respons jaringan.
  5. response.json() juga memerlukan await karena proses membaca dan mengubah data dari respons juga merupakan operasi I/O yang butuh waktu.
  6. Terakhir, asyncio.run(main()) adalah cara kita menyuruh Python untuk memulai event loop dan menjalankan coroutine main kita sampai selesai.

Meskipun contoh ini hanya mengakses satu URL, bayangkan jika kita ingin mengakses 100 URL. Dengan aiohttp dan asyncio.gather, kita bisa menjalankan semua permintaan tersebut secara bersamaan, bukan satu per satu.

Baca juga: Workshop Kampus Berdampak Inovasi Robot Mobile dan Alat Pintar Deteksi Kebencanaan di SMA Negeri 2 Tulang Bawang Tengah

Belajar pemrograman asynchronous di Python pada awalnya mungkin terasa seperti belajar cara berpikir yang baru. Namun, dengan memahami analogi sederhananya dan dibantu oleh library modern seperti aiohttp, prosesnya menjadi jauh lebih mudah. Kunci utamanya adalah mengidentifikasi bagian mana dari program Anda yang melibatkan “menunggu” (operasi I/O) dan mengubahnya menjadi non-blokir menggunakan async dan await. Dengan begitu, Anda bisa membuka potensi penuh dari aplikasi Anda untuk menjadi lebih cepat, lebih responsif, dan mampu menangani beban kerja yang jauh lebih besar tanpa pusing.

Penulis: Indra Irawan

More From Author

Mau Aplikasi Web Handal? Ini Jurus Jitu Pakai Protractor.

Mau Aplikasi Web Handal? Ini Jurus Jitu Pakai Protractor.

StandardML Bahasa Kuno yang Jadi Fondasi Teknologi Raksasa

Leave a Reply

Your email address will not be published. Required fields are marked *