Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Permohonan FastAPI Saya Memproses Permintaan Serentak Secara Berurutan Daripada Selari?

Mengapa Permohonan FastAPI Saya Memproses Permintaan Serentak Secara Berurutan Daripada Selari?

Linda Hamilton
Lepaskan: 2025-01-01 01:12:09
asal
618 orang telah melayarinya

Why Does My FastAPI Application Process Concurrent Requests Sequentially Instead of in Parallel?

FastAPI Melaksanakan Panggilan API dalam Serial Daripada Fesyen Selari

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!"}
Salin selepas log masuk

Cerapan Tambahan:

  • Operasi menyekat, seperti time.sleep(), dalam titik akhir async def akan menyekat keseluruhan pelayan, memberikan faedah pemprosesan selari tidak berkesan.
  • Tugas terikat CPU atau operasi menyekat I/O boleh dilaksanakan dalam urutan atau proses berasingan menggunakan teknik seperti run_in_threadpool(), loop.run_in_executor(), ThreadPoolExecutor atau ProcessPoolExecutor.
  • Meningkatkan bilangan pekerja (proses) boleh meningkatkan keselarasan dan melayani lebih banyak permintaan serentak.
  • Untuk pengiraan latar belakang yang berat, pertimbangkan untuk menggunakan alatan seperti Celery atau AsyncIOScheduler daripada apscheduler.

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!

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