informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Coroutine adalah komponen program yang memungkinkan beberapa titik masuk ke suatu program untuk menunda dan melanjutkan eksekusi di lokasi tertentu. Tidak seperti thread dan proses, peralihan coroutine dikontrol secara eksplisit oleh pemrogram, bukan dijadwalkan oleh sistem operasi. Hal ini membuat coroutine lebih ringan saat melakukan peralihan konteks, karena tidak perlu menyimpan dan memulihkan seluruh lingkungan eksekusi (seperti tumpukan thread).
Di Python, sebagian besar coroutine lolosasync
Danawait
Kata kunci yang ingin dicapai. Fungsi yang didefinisikan menggunakan kata kunci ini disebut "fungsi coroutine" dan fungsi tersebut tidak langsung dijalankan saat dipanggil, melainkan mengembalikan objek coroutine. Objek coroutine ini perlu dijadwalkan untuk dieksekusi di loop peristiwa.
Pemrograman asinkron adalah model konkurensi yang memungkinkan program untuk terus melakukan tugas lain sambil menunggu operasi tertentu yang berjalan lama (seperti operasi I/O) selesai. Di Python, pemrograman asinkron sering digunakan dengan coroutine, yang eksekusinya dijadwalkan melalui loop peristiwa.
async
Danawait
async def
untuk mendefinisikan fungsi coroutine.await
untuk menunggu operasi coroutine atau asinkron lainnya selesai.asyncio
Perpustakaan menyediakan implementasi event loop. Anda perlu memastikan kode asinkron Anda berjalan di beberapa event loop.asyncio.run(main())
untuk menjalankan fungsi coroutine utama Anda, yang secara otomatis membuat dan mengelola loop peristiwa.python复制代码
import asyncio | |
# 定义一个异步函数,模拟一个耗时的I/O操作 | |
async def fetch_data(url): | |
print(f"Fetching {url}...") | |
# 模拟耗时操作 | |
await asyncio.sleep(1) | |
return f"Data from {url}" | |
async def main(): | |
# 同时启动多个异步任务 | |
task1 = asyncio.create_task(fetch_data('http://example.com/data1')) | |
task2 = asyncio.create_task(fetch_data('http://example.com/data2')) | |
# 等待所有任务完成 | |
result1, result2 = await asyncio.gather(task1, task2) | |
print(result1) | |
print(result2) | |
# 运行主协程 | |
asyncio.run(main()) |
Dalam contoh ini,fetch_data
Merupakan fungsi asinkron yang mensimulasikan permintaan jaringan.main
Dalam fungsinya, kami memulai dua sekaligusfetch_data
tugas dan penggunaan yang tidak sinkronawait asyncio.gather()
Tunggu sampai mereka selesai pada waktu yang sama.
asyncio
Ini adalah bagian dari perpustakaan standar Python dan digunakan untuk mendukung coroutine dan pemrograman asinkron.Ini juga menyediakan API yang kaya sepertiasyncio.Queue
、asyncio.Lock
dll., untuk menangani masalah konkurensi dan sinkronisasi dalam kode asinkron.