Django, Flask, FastAPI, Streamlit, a one-off scraping script - all happy on a Pulsar67 VPS. uv pip install what you need, point gunicorn at it, ship.
Serverless Python (Lambda, Cloud Run) makes sense for occasional functions. For anything with shared state - Django sessions, FastAPI websockets, a Celery worker, a background scraper - you want a real process on a real machine.
A VPS lets you run gunicorn / uvicorn under systemd, redis on the same box, Postgres next door, all on a flat monthly bill. Predictable, fast, no per-invocation pricing.
pyenv-install or uv. Run 3.11 / 3.12 / 3.13 side by side per project.
On the same box, no per-DB markup. Or use the host's network to a private DB later.
Celery / RQ / APScheduler. Run background jobs without a "worker dyno" upcharge.
Your FastAPI process stays warm. Health checks pass, requests are fast.
uv (recommended for new projects)systemd unit so your app restarts after rebootsFlat monthly fee, no "execution time" line item.
Celery, RQ, APScheduler - all fine. No per-worker upcharge.
Database queries don't sit on commodity SATA. Postgres flies.
Compile C extensions, install libpq-dev, run any kernel module you need.
Flat fee, full root, no cold starts. Move off PaaS before the bill bites.