Cara Setup Gunicorn pada FastAPI untuk Concurrent Invocation

## Pendahuluan FastAPI adalah framework Python modern yang sangat cepat untuk membangun API. Namun, secara default, FastAPI development server (uvicorn) hanya menjalankan satu worker process, yang be...

By Ruby Abdullah · · tutorial
FastAPIGunicornPythonConcurrencyProduction

Pendahuluan

FastAPI adalah framework Python modern yang sangat cepat untuk membangun API. Namun, secara default, FastAPI development server (uvicorn) hanya menjalankan satu worker process, yang berarti hanya bisa menangani satu request pada satu waktu. Untuk production dan handling concurrent requests, kita memerlukan Gunicorn sebagai process manager.

Gunicorn (Green Unicorn) adalah HTTP server untuk Python yang dapat menjalankan multiple worker processes, memungkinkan aplikasi FastAPI kita menangani banyak request secara bersamaan.

Mengapa Gunicorn?

Keuntungan menggunakan Gunicorn:
  • Multiple worker processes untuk concurrent request handling
  • Load balancing otomatis antar workers
  • Graceful restart tanpa downtime
  • Production-ready dan battle-tested
  • Kompatibel dengan uvicorn workers untuk async support

Instalasi

Pertama, install dependencies yang diperlukan:

pip install fastapi uvicorn gunicorn

Atau tambahkan ke requirements.txt:

fastapi==0.109.0

uvicorn[standard]==0.27.0

gunicorn==21.2.0

Kemudian install:

pip install -r requirements.txt

Membuat Aplikasi FastAPI Sederhana

Buat file main.py:

from fastapi import FastAPI

import time

import os

app = FastAPI()

@app.get("/")

async def root():

return {

"message": "Hello World",

"workerpid": os.getpid()

}

@app.get("/slow")

async def slowendpoint():

# Simulasi operasi yang memakan waktu

time.sleep(5)

return {

"message": "This took 5 seconds",

"workerpid": os.getpid()

}

@app.get("/health")

async def healthcheck():

return {"status": "healthy"}

Setup Gunicorn dengan Uvicorn Workers

Gunicorn sendiri adalah synchronous server. Untuk mendapatkan async benefits dari FastAPI, kita menggunakan Uvicorn workers.

Menjalankan dengan Command Line

gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000

Parameter penjelasan:
  • main:app - module:application (main.py dengan variable app)
  • --workers 4 - jumlah worker processes
  • --worker-class uvicorn.workers.UvicornWorker - gunakan async uvicorn workers
  • --bind 0.0.0.0:8000 - host dan port

Membuat Configuration File

Buat file gunicornconf.py untuk konfigurasi yang lebih terstruktur:

import multiprocessing

import os

Server Socket

bind = "0.0.0.0:8000"

backlog = 2048

Worker Processes

workers = int(os.getenv("WORKERS", multiprocessing.cpucount() 2 + 1))

workerclass = "uvicorn.workers.UvicornWorker"

workerconnections = 1000

maxrequests = 10000

maxrequestsjitter = 1000

timeout = 120

keepalive = 5

Logging

accesslog = "-"

errorlog = "-"

loglevel = "info"

accesslogformat = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(D)s'

Process Naming

procname = "fastapiapp"

Server Mechanics

daemon = False

pidfile = None

user = None

group = None

tmpuploaddir = None

Graceful Timeout

gracefultimeout = 30

Jalankan dengan config file:

gunicorn main:app -c gunicornconf.py

Menentukan Jumlah Workers yang Optimal

Formula umum untuk menentukan jumlah workers:

workers = (2  CPUCORES) + 1

Contoh:
  • 2 CPU cores = 5 workers
  • 4 CPU cores = 9 workers
  • 8 CPU cores = 17 workers

Tips:
  • Untuk CPU-bound tasks: gunakan formula di atas
  • Untuk I/O-bound tasks: bisa lebih banyak workers
  • Monitor memory usage, jangan sampai kehabisan RAM
  • Start dengan formula standar, lalu adjust berdasarkan monitoring

Testing Concurrent Requests

Test apakah concurrent invocation bekerja dengan benar.

Artikel Terkait

Tutorial Reflex: Membangun Web App Full-Stack dengan Python Murni

Reflex: Membangun Aplikasi Web Full-Stack dengan Python Murni Reflex memungkinkan Anda membangun aplikasi web lengkap — ...

SQLModel: ORM Modern Python untuk Aplikasi AI yang Type-Safe

SQLModel: ORM Modern Python untuk Aplikasi AI yang Type-Safe Dalam pengembangan aplikasi AI/ML, pengelolaan data di data...

Tutorial Lengkap FastAPI untuk Machine Learning: Building Production ML APIs

Tutorial Lengkap FastAPI untuk ML: Build Production ML APIs FastAPI adalah framework web Python modern dengan performa t...

Tutorial Lengkap MongoDB: Database NoSQL untuk Aplikasi Modern

Tutorial Lengkap MongoDB: Database NoSQL untuk Aplikasi Modern MongoDB adalah database NoSQL document-oriented yang sang...