Coroutine: Bahagian kod yang dapat dijeda dan dilanjutkan dalam skrip multi-utas disebut coroutine. coroutine bekerjasama dalam program pelbagai utas. Apabila satu coroutine berhenti maka coroutine lain dapat dijalankan.
Gelung acara: Ini digunakan untuk memulai pelaksanaan coroutine dan menangani operasi input / output. Ia memerlukan banyak tugas dan menyelesaikannya.
Tugas: Pelaksanaan dan hasil coroutine ditentukan oleh tugas. Anda boleh menetapkan banyak tugas menggunakan pustaka asyncio dan menjalankan tugas secara tidak segerak.
Masa Depan: Ia berfungsi sebagai simpanan masa depan di mana hasil coroutine akan disimpan setelah selesai. Ini berguna apabila mana-mana coroutine perlu menunggu hasil dari coroutine yang lain.
Bagaimana anda dapat melaksanakan konsep perpustakaan asyncio di atas ditunjukkan dalam tutorial ini dengan menggunakan beberapa contoh mudah.
Contoh-1: Buat coroutine tunggal dengan satu tugas
Buat fail bernama async1.py dan tambahkan kod berikut. perpustakaan asyncio diimport untuk menggunakan fungsi perpustakaan ini. Tambah fungsi dinyatakan untuk mengira jumlah julat nombor tertentu. Julat nombor dari 1 hingga 101 ditugaskan oleh tugas dengan kelewatan satu saat. Gelung peristiwa dinyatakan bahawa ia akan berjalan sehingga semua tugas kaedah utama selesai. Setelah mengira nilainya, fungsi akan menunggu satu saat dan mencetak hasilnya.
import asyncioasync def add (permulaan, akhir, tunggu):
# Memulakan pemboleh ubah jumlah
jumlah = 0
#Hitung jumlah semua nombor
untuk n dalam julat (permulaan, akhir):
jumlah + = n
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
#Cetak hasilnya
cetak (f'Sum dari start hingga end adalah sum ')
async def main ():
#Menetapkan satu tugas
tugas = gelung.create_task (tambah (1,101,1))
#Jalankan tugas secara tidak segerak
tunggu asyncio.tunggu ([tugas])
jika __nama__ == '__main__':
#Tyatakan gelung acara
gelung = asyncio.get_event_loop ()
#Jalankan kod sehingga menyelesaikan semua tugas
gelung.run_until_complete (utama ())
# Tutup gelung
gelung.tutup ()
Pengeluaran:
$ python3 async1.pyOutput menunjukkan jumlah 1 hingga 101 iaitu 5050.
Contoh-2: Buat Pelbagai coroutin
Penggunaan pustaka asyncio akan dihapus apabila anda menjalankan pelbagai coroutin secara serentak. Buat fail baru bernama async2.py dan tambahkan kod berikut. Tiga tugas dihasilkan dengan tiga julat yang berbeza dan nilai menunggu di utama () kaedah. Tugas pertama akan mengira jumlah dari 5 hingga 500000 dengan menunggu 3 saat, tugas kedua akan mengira jumlah dari 2 hingga 300000 dengan menunggu 2 saat dan tugas ketiga akan mengira jumlah dari 10 hingga 1000 dengan menunggu 1 saat. Tugas dengan nilai menunggu rendah akan selesai pada mulanya dan tugas dengan nilai menunggu tinggi akan selesai akhirnya.
import asyncioasync def add (permulaan, akhir, tunggu):
# Memulakan pemboleh ubah jumlah
jumlah = 0
#Kira jumlah semua nombor
untuk n dalam julat (permulaan, akhir):
jumlah + = n
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
#Cetak hasilnya
cetak (f'Sum dari start hingga end adalah sum ')
async def main ():
#Tugaskan tugas pertama
tugas1 = gelung.create_task (tambah (5,500000,3))
#Tugaskan tugas kedua
task2 = gelung.create_task (tambah (2.300000,2))
#Tugaskan tugas ketiga
task3 = gelung.create_task (tambah (10,1000,1))
#Jalankan tugas secara tidak segerak
tunggu asyncio.tunggu ([task1, task2, task3])
jika __nama__ == '__main__':
#Tyatakan gelung acara
gelung = asyncio.get_event_loop ()
#Jalankan kod sehingga menyelesaikan semua tugas
gelung.run_until_complete (utama ())
# Tutup gelung
gelung.tutup ()
Pengeluaran:
$ python3 async1.pyHasilnya menunjukkan bahawa task3 selesai terlebih dahulu kerana waktu menunggu tugas ini hanya 1 saat dan task1 selesai terakhir kerana masa menunggu tugas ini adalah 3 saat.
Contoh-3: coroutine dengan masa depan
Contoh ini menunjukkan penggunaan objek perpustakaan asyncio yang akan datang. Buat fail baru bernama async3.py dan tambahkan kod berikut. Dua tugas diberikan untuk masa depan dalam contoh ini. tunjuk ajar fungsi dinyatakan di sini untuk mencetak mesej sebelum menjalankan coroutine dan setelah menyelesaikan pelaksanaan. Tugas pertama akan menunggu selama 2 saat dan selesai. Tugas kedua akan menunggu selama 1 saat dan selesai terlebih dahulu.
import asyncioasync def show_message (nombor, tunggu):
#Cetak mesej
cetak (f'Task number sedang berjalan ')
#Tunggu detik yang ditentukan
tunggu asyncio.tidur (tunggu)
cetak (f'Task number selesai ')
async def stop_after (bila):
tunggu asyncio.tidur (bila)
gelung.berhenti ()
async def main ():
#Tugaskan tugas pertama
task1 = asyncio.pastikan_future (tunjukkan_mesej (1,2))
cetak ('Jadual 1')
#Tugaskan tugas kedua
task2 = asyncio.pastikan_future (tayangan_mesej (2,1))
cetak ('Jadual 2')
#Jalankan tugas secara tidak segerak
tunggu asyncio.tunggu ([task1, task2])
jika __nama__ == '__main__':
#Tyatakan gelung acara
gelung = asyncio.get_event_loop ()
#Jalankan kod kaedah utama sehingga menyelesaikan semua tugas
gelung.run_until_complete (utama ())
Pengeluaran:
$ python3 async3.pyIni ditunjukkan dalam output bahawa tugas1 dimulakan pertama dan selesai terakhir, dan tugas2 dimulakan kemudian tetapi diselesaikan terlebih dahulu untuk waktu tunggu yang singkat.
Kesimpulannya
Konsep asas pengaturcaraan tak segerak menggunakan pustaka asyncio python dijelaskan di sini. Harap, anda dapat menulis kod berbilang utas dalam python setelah mengamalkan contoh tutorial ini.