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
Susan Sarandonasal
2024-11-21 12:45:16715semak imbas

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)

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

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)

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!

Kenyataan:
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