Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kemahiran pembangunan coroutine tak segerak: mencapai panggilan antara muka API yang cekap

Kemahiran pembangunan coroutine tak segerak: mencapai panggilan antara muka API yang cekap

WBOY
WBOYasal
2023-12-17 08:11:17579semak imbas

Kemahiran pembangunan coroutine tak segerak: mencapai panggilan antara muka API yang cekap

Kemahiran pembangunan coroutine tak segerak: Laksanakan panggilan antara muka API yang cekap

Dengan pembangunan aplikasi web dan peningkatan dalam keperluan pengguna, kami sering perlu memanggil pelbagai antara muka API untuk melaksanakan fungsi kami. Kaedah panggilan API tradisional selalunya serentak, iaitu, apabila memanggil antara muka API, benang semasa akan disekat dan menunggu API mengembalikan hasilnya sebelum meneruskan operasi seterusnya. Kaedah ini boleh diterima untuk satu panggilan API, tetapi apabila kita perlu memanggil berbilang antara muka API pada masa yang sama, kita akan menghadapi kesesakan prestasi.

Untuk menyelesaikan masalah ini, kemahiran pembangunan coroutine tak segerak wujud. Coroutine tak segerak ialah model pengaturcaraan yang dipacu peristiwa tidak menyekat yang boleh melaksanakan berbilang tugas secara serentak dalam satu urutan untuk meningkatkan prestasi serentak program. Dalam Python, kita boleh menggunakan modul asyncio untuk melaksanakan pembangunan coroutine asynchronous.

Pertama, kita perlu memahami beberapa konsep asas. Tugasan dalam coroutine tak segerak dipanggil coroutine (coroutine), iaitu fungsi khas yang boleh menggantung (menghasilkan) dirinya semasa pelaksanaan dan melepaskan kawalan kepada tugas lain. Apabila tugas yang digantung diaktifkan semula, pelaksanaan boleh diteruskan. Selain itu, pelaksanaan serentak dalam coroutine tak segerak dilaksanakan melalui gelung acara, yang bertanggungjawab untuk menjadualkan semua tugasan coroutine Selepas setiap tugasan dilaksanakan, ia diputuskan sama ada untuk melaksanakan tugas seterusnya berdasarkan status tugas.

Mari kita lihat contoh khusus untuk memahami penggunaan coroutine tak segerak.

import asyncio

async def fetch_data(url):
    # 模拟API接口调用,这里使用time.sleep来模拟IO操作
    await asyncio.sleep(1)
    return "Data from {}".format(url)

async def main():
    # 创建一个事件循环
    loop = asyncio.get_event_loop()

    # 创建任务列表
    tasks = [
        loop.create_task(fetch_data("http://api1.example.com")),
        loop.create_task(fetch_data("http://api2.example.com")),
        loop.create_task(fetch_data("http://api3.example.com"))
    ]

    # 等待所有任务完成
    await asyncio.wait(tasks)

    # 获取任务结果
    for task in tasks:
        print(task.result())

# 运行主函数
if __name__ == "__main__":
    asyncio.run(main())

Dalam contoh ini, kami mentakrifkan fungsi fetch_data untuk mensimulasikan panggilan antara muka API. Dalam fungsi utama utama, kami mencipta gelung peristiwa dan mencipta tiga tugas untuk memanggil tiga antara muka API yang berbeza. Kemudian, kami menunggu semua tugasan selesai dan mencetak hasil tugasan tersebut.

Dengan menggunakan coroutine tak segerak, kami boleh memanggil berbilang antara muka API pada masa yang sama tanpa menyekat urutan semasa. Ini dapat meningkatkan prestasi program dengan lebih baik.

Selain coroutine tak segerak asas, modul asyncio juga menyediakan beberapa fungsi lain, seperti operasi fail tak segerak, permintaan rangkaian, dsb. Kita boleh memilih fungsi yang sesuai mengikut keperluan tertentu.

Ringkasnya, kemahiran pembangunan coroutine tak segerak boleh membantu kami mencapai panggilan antara muka API yang cekap. Dengan menukar operasi IO menyekat kepada operasi IO tak segerak yang tidak menyekat, kami boleh melaksanakan berbilang tugas secara serentak dalam urutan yang sama dan meningkatkan prestasi serentak program. Coroutine tak segerak ialah model pengaturcaraan serentak yang sangat berkuasa dalam Python dan layak untuk kajian dan aplikasi kami yang mendalam.

Atas ialah kandungan terperinci Kemahiran pembangunan coroutine tak segerak: mencapai panggilan antara muka API yang cekap. 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