Pernyataan Masalah:
Walaupun FastAPI menyediakan keupayaan selari, API panggilan yang dibuat serentak melalui berbilang tab penyemak imbas diproses secara berurutan daripada selari. Tingkah laku ini berlaku apabila titik akhir ditakrifkan dengan def dan bukannya async def.
Analisis dan Penyelesaian:
FastAPI menggunakan threadpool luaran untuk mengendalikan titik akhir yang ditakrifkan dengan def. Apabila titik akhir sedemikian menerima permintaan, FastAPI menjalankannya dalam urutan berasingan daripada kumpulan benang. Walau bagaimanapun, hanya satu permintaan boleh diproses pada satu-satu masa, menghasilkan pemprosesan permintaan berurutan dan bukannya keselarian sebenar.
Sebaliknya, titik akhir yang ditakrifkan dengan async def dilaksanakan terus dalam gelung peristiwa utama, membenarkan pemprosesan permintaan selari benar . Ini kerana menunggu panggilan dalam titik akhir async def menghasilkan tugas lain dalam gelung acara sementara menunggu operasi tak segerak.
Untuk menyelesaikan isu, pastikan titik akhir yang tidak memerlukan penyekatan operasi terikat I/O ditakrifkan dengan async def untuk memanfaatkan keupayaan selari FastAPI. Berikut ialah contoh titik akhir yang boleh dilaksanakan secara selari:
@app.get("/ping") async def ping(request: Request): print("Hello") await asyncio.sleep(5) print("bye") return {"ping": "pong!"}
Cerapan Tambahan:
Atas ialah kandungan terperinci Mengapa Permohonan FastAPI Saya Memproses Permintaan Serentak Secara Berurutan Daripada Selari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!