Rumah > pembangunan bahagian belakang > Tutorial Python > Bilakah saya harus menggunakan `menunggu` dalam pengaturcaraan tak segerak Python 3.5, dan apakah batasannya?

Bilakah saya harus menggunakan `menunggu` dalam pengaturcaraan tak segerak Python 3.5, dan apakah batasannya?

Susan Sarandon
Lepaskan: 2024-11-26 17:06:14
asal
961 orang telah melayarinya

When should I use `await` in Python 3.5 asynchronous programming, and what are its limitations?

Bila Perlu Digunakan dan Had menunggu dalam Python 3.5

Asynchrony dalam Python 3.5 terutamanya difasilitasi melalui perpustakaan asyncio dan async/ menunggu sintaks. Memahami masa dan tempat untuk memanfaatkan binaan ini boleh menjadi penting untuk mengoptimumkan prestasi aplikasi tak segerak anda.

Keputusan untuk menggunakan menunggu harus bergantung pada sifat kod anda. Secara lalai, kod anda akan dijalankan secara serentak. Untuk memperkenalkan asynchrony, anda boleh mentakrifkan fungsi menggunakan async def dan memanggilnya dengan await. Walau bagaimanapun, adalah penting untuk menentukan sama ada kod segerak atau tak segerak adalah lebih sesuai untuk tugas yang sedang dijalankan.

Sebagai peraturan umum, penggunaan await adalah berfaedah apabila berurusan dengan operasi I/O. Operasi I/O, seperti permintaan rangkaian atau panggilan pangkalan data, selalunya tidak segerak dan boleh dipercepatkan dengan ketara dengan mewakilkannya ke gelung acara.

Sebagai contoh, pertimbangkan kod segerak berikut:

download(url1)  # takes 5 seconds
download(url2)  # takes 5 seconds
# Total time: 10 seconds
Salin selepas log masuk

Menggunakan asyncio dan menunggu, kod yang sama boleh ditulis semula secara tidak segerak, mengurangkan jumlah masa pelaksanaan kepada masa yang diambil untuk operasi yang lebih lama:

await asyncio.gather(
    async_download(url1),  # takes 5 seconds
    async_download(url2),   # takes 5 seconds
)
# Total time: only 5 seconds (plus minimal asyncio overhead)
Salin selepas log masuk

Perlu juga ambil perhatian bahawa sebarang fungsi tak segerak boleh menggunakan kod segerak secara bebas jika perlu. Walau bagaimanapun, menghantar kod segerak kepada tak segerak tanpa sebab yang sah harus dielakkan, kerana ia tidak semestinya memperkenalkan apa-apa faedah.

Satu pertimbangan penting dengan kod tak segerak ialah potensi operasi segerak yang berjalan lama untuk membekukan keseluruhan program . Sebarang operasi segerak yang melebihi ambang tertentu (cth., 50 milisaat) boleh menyekat sebarang tugas tak segerak serentak.

Untuk mengurangkan isu ini, anda boleh menyumber luar operasi sedemikian kepada proses yang berasingan dan menunggu keputusannya:

executor = ProcessPoolExecutor(2)

async def extract_links(url):
    ...
    # If search_in_very_big_file() is a long synchronous operation, offload it to a separate process
    links_found = await loop.run_in_executor(executor, search_in_very_big_file, links)
Salin selepas log masuk

Akhir sekali, perlu diperhatikan bahawa fungsi segerak terikat I/O boleh disepadukan ke dalam kod tak segerak menggunakan run_in_executor() bersama-sama dengan ThreadPoolExecutor untuk meminimumkan overhed yang dikaitkan dengan multiprocessing.

Atas ialah kandungan terperinci Bilakah saya harus menggunakan `menunggu` dalam pengaturcaraan tak segerak Python 3.5, dan apakah batasannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan