3 poin oleh GN⁺ 2024-05-09 | Belum ada komentar. | Bagikan ke WhatsApp
  • Asyncio adalah cara yang baik untuk menangani program yang terikat I/O di Python, dan pada dasarnya menyediakan lapisan yang baik di atas Python Generator
  • Generator membuat kode lebih efisien dalam penggunaan memori, dan dengan keyword yield, fungsi dapat dijeda lalu dilanjutkan kembali
  • Dengan yield from, generator dapat memanggil sub-generator atau objek iterable sehingga dapat membentuk rantai generator

Event loop

  • Inti dari asyncio adalah event loop yang menjalankan dan mengelola task saat ini
  • Event loop mengiterasi daftar task dan menjalankan tiap task dengan next(task)
  • Saat melakukan operasi I/O, task menjeda eksekusinya dengan yield dan menyerahkan kendali ke event loop

Sleeping

  • Dengan yield from, kita dapat menambahkan sub-generator ke dalam task
  • Dengan menambahkan generator sleep, eksekusi task dapat dijeda hingga waktu yang ditentukan
  • Ketika sleep keluar dari loop while, exception StopIteration terjadi sehingga yield from di fungsi task melanjutkan ke baris kode berikutnya

Dari Yield ke Await

  • Dengan dunder method __await__ dan keyword async, kita dapat beralih dari yield ke await
  • Keyword await dapat memanggil method __await__ milik instance kelas atau digunakan pada coroutine (objek yang dibuat oleh fungsi async)
  • Keyword await dapat dianggap sebagai sinonim dari yield from, dengan beberapa aturan validasi tambahan
  • Kita dapat membuat class Task sendiri, mengimplementasikan method __await__, lalu menambahkan task yang dibuat dengan fungsi create_task ke event loop
  • Pengelola event loop menjalankan task, dan saat exception StopIteration terjadi, task ditandai sebagai selesai
  • Fungsi sleep juga perlu dimodifikasi agar kompatibel dengan async

AsyncIO dan Await

  • Jika pada kode di atas "jacobio" diganti menjadi "asyncio", maka kita akan sepenuhnya menggunakan paket asyncio
  • Asyncio melakukan lebih banyak hal, tetapi bagian intinya dapat direproduksi dari nol menggunakan generator dasar
  • Dalam paket asyncio yang sebenarnya, kita dapat menggunakan fungsi seperti asyncio.gather() untuk menangani banyak task

Pendapat GN⁺

  • Artikel ini menjelaskan cara kerja asyncio dengan mudah menggunakan generator, sehingga tampaknya akan sangat membantu bagi developer yang baru pertama kali mengenal asyncio
  • Asyncio adalah library yang dioptimalkan untuk pemrosesan I/O berperforma tinggi, dan dengan memahami struktur internalnya lewat artikel ini, kita bisa memanfaatkannya lebih efektif dalam proyek nyata
  • Namun, asyncio yang sebenarnya memiliki struktur yang jauh lebih kompleks, sehingga untuk penggunaan di dunia kerja tampaknya tetap diperlukan pembelajaran yang lebih mendalam melalui dokumentasi resmi dan sumber lain
  • Library lain yang menyediakan fungsi serupa dengan asyncio antara lain Trio dan Curio, dan membandingkan perbedaannya juga tampaknya akan menarik
  • Saat mengadopsi asyncio, ada banyak hal yang perlu dipertimbangkan seperti kompatibilitas dengan kode sinkron yang sudah ada, penanganan error, dan pengujian, sehingga diperlukan peninjauan dan persiapan yang memadai

Belum ada komentar.

Belum ada komentar.