Rumah > pembangunan bahagian belakang > Tutorial Python > Bilakah saya harus menggunakan `menunggu` Python 3.5 dan bilakah saya harus mengelaknya?

Bilakah saya harus menggunakan `menunggu` Python 3.5 dan bilakah saya harus mengelaknya?

Susan Sarandon
Lepaskan: 2024-11-21 12:45:16
asal
714 orang telah melayarinya

When should I use Python 3.5's `await` and when should I avoid it?

Bila Merangkul dan Bila Perlu Mengelakkan Python 3.5 menanti

Dalam Python 3.5, pengenalan asyncio dan await membawa pengaturcaraan tak segerak ke hadapan. Anjakan paradigma ini membolehkan penyelarasan yang lebih besar dan pelaksanaan yang lebih pantas, namun sempadannya boleh mengelirukan. Artikel ini menyelidiki kehalusan masa untuk mengambil kerja dan bila untuk mengelak daripada menunggu.

Merangkul menunggu untuk Operasi I/O

Rasional utama untuk menerima menunggu terletak pada keupayaannya untuk memanfaatkan kuasa kod tak segerak. Pertimbangkan operasi I/O seperti permintaan rangkaian atau pembacaan fail. Perlaksanaan segerak bagi operasi ini biasanya menyekat keseluruhan program, memaksanya menunggu untuk selesai setiap tugas. Sebaliknya, kod tak segerak membenarkan operasi ini dilaksanakan serentak, membebaskan atur cara untuk mengendalikan tugasan lain.

# Synchronous Way
download(url1)  # takes 5 sec.
download(url2)  # takes 5 sec.
# Total time: 10 sec.

# Asynchronous Way
await asyncio.gather(
    async_download(url1),  # takes 5 sec. 
    async_download(url2)   # takes 5 sec.
)
# Total time: 5 sec. (plus asyncio overhead)
Salin selepas log masuk

Dalam contoh di atas, pendekatan tak segerak selesai dalam separuh masa, dengan berkesan meminimumkan masa terbuang yang dibelanjakan menunggu operasi I/O.

Mengelak daripada Salah Penggunaan menunggu untuk Segerak Kod

Sementara menunggu kecemerlangan dalam mengendalikan operasi I/O, ia tidak seharusnya digunakan secara sembarangan pada kod segerak. Kod segerak, seperti tugas terikat CPU atau manipulasi data mudah, tidak mendapat manfaat daripada paradigma tak segerak dan sebenarnya boleh memperkenalkan overhed yang tidak perlu.

# Synchronous Code That Should Remain Synchronous
def parse(html):
    # This function does not involve any I/O operations.
    links = extract_links_from_html(html)
    return links
Salin selepas log masuk

Mengirim kod segerak sebagai tak segerak tidak mempunyai tujuan dan boleh membawa kepada kemerosotan dalam prestasi.

Pertimbangan Khas untuk Segerak Berlangsung Lama Operasi

Aspek penting untuk dipertimbangkan apabila menggunakan asyncio ialah kesan operasi segerak yang berjalan lama pada ekosistem tak segerak. Operasi segerak yang mengambil tempoh yang lama untuk dilaksanakan (mis., melebihi 50 ms) berpotensi membekukan semua operasi tak segerak yang sedang berjalan.

async def extract_links(url):
    data = await download(url)
    links = parse(data)
    # If search_in_very_big_file() takes a long time,
    # all ongoing async functions (elsewhere in code) will be suspended.
    links_found = search_in_very_big_file(links)
Salin selepas log masuk

Untuk mengelakkan pembekuan ini, pertimbangkan untuk melaksanakan operasi yang berjalan lama itu dalam proses berasingan atau menggunakan kumpulan benang untuk operasi terikat I/O dalam konteks tak segerak.

Dalam Kesimpulannya, tunggu dalam Python 3.5 harus digunakan dengan bijak apabila berurusan dengan operasi I/O untuk memanfaatkan faedah konkurensi. Walau bagaimanapun, ia harus dielakkan untuk kod segerak dan operasi jangka panjang dalam ekosistem tak segerak untuk mengelakkan potensi perangkap prestasi dan kesesakan. Pertimbangan yang teliti terhadap prinsip ini akan memastikan penggunaan berkesan keupayaan tak segerak Python 3.5.

Atas ialah kandungan terperinci Bilakah saya harus menggunakan `menunggu` Python 3.5 dan bilakah saya harus mengelaknya?. 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