Python

Tutorial Python Asyncio

Tutorial Python Asyncio
Perpustakaan Asyncio diperkenalkan di python 3.4 untuk melaksanakan program serentak utas tunggal. Perpustakaan ini terkenal daripada perpustakaan dan kerangka kerja lain kerana kepantasan dan penggunaannya yang hebat. Perpustakaan ini digunakan dalam python untuk membuat, melaksanakan dan menyusun coroutin dan menangani pelbagai tugas secara serentak tanpa melakukan tugas secara selari. Bahagian utama perpustakaan ini dinyatakan di bawah:

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 asyncio
async 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.py

Output 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 asyncio
async 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.py

Hasilnya 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 asyncio
async 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.py

Ini 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.

Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...
Permainan Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar anda ketika menggunakan Linux-ia juga dapat menjadi sumber hiburan kerana anda dapat menggunakannya untuk m...
Aplikasi Pemetaan Gamepad Terbaik untuk Linux
Sekiranya anda suka bermain permainan di Linux dengan gamepad dan bukannya sistem input papan kekunci dan tetikus biasa, ada beberapa aplikasi berguna...