FastAPI Menjalankan Panggilan API secara Bersiri Daripada Fesyen Selari
S: Mengapakah panggilan API FastAPI dijalankan secara bersiri dan bukannya selari?
J: Menurut dokumentasi FastAPI, apabila menggunakan def dan bukannya async def untuk mentakrifkan fungsi operasi laluan, ia dijalankan dalam kumpulan benang luaran yang kemudiannya ditunggu, dan bukannya dipanggil terus. Ini dilakukan untuk mengelakkan penyekatan pelayan.
Pertimbangan Tambahan untuk Pelaksanaan Selari:
titik akhir async def vs. def:
-
async def: Fungsi berjalan terus dalam gelung acara; akan diproses secara serentak, selagi mereka menunggu operasi terikat I/O yang tidak menyekat.
-
def: Fungsi dijalankan dalam rangkaian berasingan daripada kumpulan utas luaran; akan diproses secara bersiri, melainkan dijalankan di luar gelung acara.
Menggunakan Operasi Penyekatan:
Jika titik akhir async def mengandungi operasi menyekat dan tidak menunggu selesai, ia akan menyekat gelung acara dan permintaan akan diproses secara bersiri.
Penyelesaian:
- Tentukan titik akhir dengan def biasa dan bukannya async def (jika tiada operasi yang boleh ditunggu).
- Gunakan fungsi run_in_threadpool() FastAPI untuk melaksanakan tugas menyekat secara berasingan benang.
- Gunakan asyncio's loop.run_in_executor() atau asyncio.to_thread() untuk menjalankan tugas menyekat dalam pelaksana atau thread yang berasingan.
Strategi Pengoptimuman Lain:
- Gunakan lebih ramai pekerja untuk mengambil kesempatan CPU berbilang teras.
- Pertimbangkan untuk menggunakan Celery atau AsyncIOScheduler untuk pengiraan latar belakang yang berat.
Atas ialah kandungan terperinci Mengapa FastAPI Menjalankan Panggilan API Secara Bersiri Daripada Selari?. 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