Coroutine: Bagian kode yang dapat dijeda dan dilanjutkan dalam skrip multi-utas disebut coroutine. coroutine bekerja sama dalam program multi-utas. Ketika satu coroutine berhenti maka coroutine lainnya dapat mengeksekusi.
Lingkaran acara: Ini digunakan untuk memulai eksekusi coroutine dan menangani operasi input/output. Dibutuhkan banyak tugas dan menyelesaikannya.
Tugas: Eksekusi dan hasil coroutine ditentukan oleh tugas. Anda dapat menetapkan beberapa tugas menggunakan pustaka asyncio dan menjalankan tugas secara asinkron.
Masa depan: Ini bertindak sebagai penyimpanan masa depan di mana hasil coroutine akan disimpan setelah selesai. Ini berguna ketika ada coroutine yang harus menunggu hasil coroutine lainnya.
Bagaimana Anda dapat menerapkan konsep perpustakaan asyncio di atas ditunjukkan dalam tutorial ini dengan menggunakan beberapa contoh sederhana.
Contoh-1: Buat Coroutine tunggal dengan satu tugas
Buat file bernama asinkron1.py dan tambahkan kode berikut. perpustakaan asyncio diimpor untuk menggunakan fungsi perpustakaan ini. Menambahkan fungsi dideklarasikan untuk menghitung jumlah rentang angka tertentu. Rentang angka dari 1 hingga 101 ditetapkan oleh tugas dengan penundaan satu detik. Loop acara dideklarasikan bahwa itu akan berjalan sampai semua tugas metode utama selesai. Setelah menghitung nilainya, fungsi akan menunggu selama satu detik dan mencetak hasilnya.
impor asyncioasync def add (mulai, akhir, tunggu):
#Inisialisasi jumlah variabel
jumlah = 0
#Hitung jumlah semua angka
untuk n dalam rentang (mulai, akhir):
jumlah += n
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
#Cetak hasilnya
print(f'Jumlah dari start ke end adalah sum')
async def main():
#Menetapkan satu tugas
tugas = putaran.buat_tugas(tambahkan(1,101,1))
#Jalankan tugas secara tidak sinkron
tunggu asyncio.tunggu([tugas])
jika __name__ == '__main__':
#Deklarasikan loop acara
loop = tidak sinkron.get_event_loop()
#Jalankan kode sampai menyelesaikan semua tugas
lingkaran.jalankan_sampai_lengkap(utama())
#Tutup loop
lingkaran.Menutup()
Keluaran:
$ python3 async1.pyOutput menunjukkan jumlah 1 hingga 101 yaitu 5050.
Contoh-2: Buat Beberapa coroutine
Penggunaan perpustakaan asyncio akan dihapus ketika Anda menjalankan beberapa coroutine secara bersamaan. Buat file baru bernama async2.py dan tambahkan kode berikut. Tiga tugas dihasilkan dengan tiga rentang berbeda dan nilai tunggu di utama() metode. Tugas pertama akan menghitung jumlah dari 5 hingga 500.000 dengan menunggu 3 detik, tugas kedua akan menghitung jumlah dari 2 hingga 300.000 dengan menunggu 2 detik dan tugas ketiga akan menghitung jumlah dari 10 hingga 1000 dengan menunggu 1 detik. Tugas dengan nilai menunggu yang rendah akan selesai pada awalnya dan tugas dengan nilai menunggu yang tinggi akan selesai pada akhirnya.
impor asyncioasync def add (mulai, akhir, tunggu):
#Inisialisasi jumlah variabel
jumlah = 0
#Hitung jumlah semua angka
untuk n dalam rentang (mulai, akhir):
jumlah += n
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
#Cetak hasilnya
print(f'Jumlah dari mulai ke akhir adalah jumlah')
async def main():
#Tugaskan tugas pertama
tugas1=loop.buat_tugas(tambahkan(5,500000,3))
#Tugaskan tugas kedua
tugas2=loop.buat_tugas(tambahkan(2,300000,2))
#Tugaskan tugas ketiga
tugas3=loop.buat_tugas(tambah (10,1000,1))
#Jalankan tugas secara tidak sinkron
tunggu asyncio.tunggu([tugas1,tugas2,tugas3])
jika __name__ == '__main__':
#Deklarasikan loop acara
loop = tidak sinkron.get_event_loop()
#Jalankan kode sampai menyelesaikan semua tugas
lingkaran.jalankan_sampai_lengkap(utama())
#Tutup loop
lingkaran.Menutup()
Keluaran:
$ python3 async1.pyOutputnya menunjukkan bahwa tugas3 selesai lebih dulu karena waktu tunggu tugas ini hanya 1 detik dan tugas1 selesai terakhir karena waktu tunggu tugas ini adalah 3 detik.
Contoh-3: coroutine dengan masa depan
Contoh ini menunjukkan penggunaan objek perpustakaan asyncio di masa mendatang. Buat file baru bernama async3.py dan tambahkan kode berikut. Dua tugas ditugaskan untuk masa depan dalam contoh ini. tunjukkan pesan fungsi dideklarasikan di sini untuk mencetak pesan sebelum menjalankan coroutine dan setelah menyelesaikan eksekusi. Tugas pertama akan menunggu selama 2 detik dan selesai terakhir. Tugas kedua akan menunggu selama 1 detik dan selesai terlebih dahulu.
impor asyncioasync def show_message(nomor,tunggu):
#Cetak pesan
print(f'Tugas number sedang berjalan')
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
print(f'Tugas angka selesai')
async def stop_after(kapan):
tunggu asyncio.tidur (kapan)
lingkaran.berhenti()
async def main():
#Tugaskan tugas pertama
tugas1=asincio.pastikan_masa depan(show_message(1,2))
print('Jadwal 1')
#Tugaskan tugas kedua
task2=asyncio.pastikan_masa depan(show_message(2,1))
print('Jadwal 2')
#Jalankan tugas secara tidak sinkron
tunggu asyncio.tunggu([tugas1,tugas2])
jika __name__ == '__main__':
#Deklarasikan loop acara
loop = tidak sinkron.get_event_loop()
#Jalankan kode metode utama hingga menyelesaikan semua tugas
lingkaran.jalankan_sampai_lengkap(utama())
Keluaran:
$ python3 async3.pyDitunjukkan pada output bahwa tugas1 dimulai terlebih dahulu dan diselesaikan terakhir, dan tugas2 dimulai kemudian tetapi diselesaikan terlebih dahulu untuk waktu tunggu yang singkat.
Kesimpulan
Konsep dasar pemrograman asinkron menggunakan pustaka asyncio python dijelaskan di sini. Semoga, Anda dapat menulis kode multi-utas dengan python setelah mempraktikkan contoh-contoh tutorial ini.