Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa FastAPI Melaksanakan Panggilan API Secara Bersiri Daripada Selari?

Mengapa FastAPI Melaksanakan Panggilan API Secara Bersiri Daripada Selari?

Susan Sarandon
Lepaskan: 2025-01-02 15:15:42
asal
217 orang telah melayarinya

Why Does FastAPI Execute API Calls Serially Instead of in Parallel?

FastAPI: Mengapa Panggilan API Dilaksanakan Secara Bersiri Daripada Selari

FastAPI mentakrifkan titik akhir (juga dikenali sebagai fungsi operasi laluan) menggunakan kedua-dua async def dan def. Walaupun secara konsep async def mungkin mencadangkan paralelisasi, FastAPI sebenarnya mengendalikan fungsi ini secara berbeza:

Titik Akhir Ditakrifkan dengan async def:

  • Jalankan terus dalam gelung acara.
  • Hanya boleh dipanggil daripada fungsi async lain dan mesti berhenti seketika (menunggu) sebelum melaksanakan operasi bukan async, seperti I/O.
  • Pastikan gelung peristiwa tidak disekat dan tugas lain boleh dilaksanakan serentak.

Titik Akhir Ditakrifkan dengan def :

  • Lari bukan secara langsung dalam gelung acara tetapi sebaliknya dalam urutan berasingan daripada kumpulan benang luaran.
  • Boleh dipanggil daripada sama ada fungsi async atau bukan async.
  • Boleh menyekat gelung peristiwa dan menghalang tugas lain daripada dilaksanakan jika operasi bukan segerak dilakukan tanpa menjeda.
  • Tawarkan pengoptimuman prestasi dalam tertentu senario.

Impak terhadap Keselarian:

Berdasarkan pemahaman ini, mari kita periksa contoh kod anda:

@app.get("/ping")
async def ping(request: Request):
    print("Hello")
    time.sleep(5) # This sleeps the event loop for 5 seconds
    print("bye")
    return {"ping": "pong!"}
Salin selepas log masuk

Dalam kes ini , perkara berikut berlaku:

  • Dua permintaan untuk /ping ialah dihantar serentak.
  • defENDPOINT tak segerak berjalan terus dalam gelung acara.
  • Panggilan time.sleep(5) menjeda gelung acara selama 5 saat.
  • Sepanjang 5 ini saat, permintaan kedua dibariskan dalam baris gilir dan tidak boleh diproses kerana gelung acara disekat.
  • Setelah gelung acara disambung semula selepas 5 saat, permintaan kedua diproses.

Hasilnya, respons dicetak secara bersiri:

Hello
bye
Hello
bye
Salin selepas log masuk

Untuk mendayakan penyejajaran, operasi tidak segerak seperti time.sleep() tidak boleh digunakan dalam titik akhir async def. Sebaliknya, salah satu daripada pendekatan berikut boleh digunakan:

  • Gunakan run_in_threadpool() untuk menghasilkan benang dan laksanakan operasi menyekat di luar gelung acara.
  • Gunakan loop.run_in_executor() atau asyncio.to_thread() untuk menjalankan operasi menyekat dalam benang berasingan atau proses.
  • Pertimbangkan untuk menggunakan ThreadPoolExecutor atau ProcessPoolExecutor untuk menjalankan tugas intensif secara pengiraan di luar proses.

Atas ialah kandungan terperinci Mengapa FastAPI Melaksanakan Panggilan API Secara Bersiri Daripada Selari?. 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