Is A Fast & Friendly Web Framework For Building Async APIs With Python 3.11+
Full Documentation -> https://pantherpy.github.io
- Document-oriented Databases ODM (PantherDB, MongoDB)
- Visual API Monitoring (In Terminal)
- Caching for APIs (In Memory, In Redis)
- Built-in Authentication Classes (Customizable)
- Built-in Permission Classes (Customizable)
- Handle Custom Middlewares
- Handle Custom Throttling
We implemented most of the Python frameworks and sent
25,000
requests per second
for 10
seconds
(Total 250,000
requests)
in the same environment
with https://github.com/nakabonne/ali and here's the result:
you can find the detailed results & source codes here --> benchmarks
Framework | Throughput | Request Handled | Max Latencies |
---|---|---|---|
Sanic | 23,326 | 233,842 | 268.8ms |
Panther | 14,719 | 147,595 | 113.1ms |
FastAPI | 14,573 | 146,467 | 155.1ms |
Tornado | 4,969 | 50.585 | 426.5ms |
Flask | 3,555 | 36,396 | 1.2s |
Django | 2,188 | 22,814 | 526.3ms |
Bottle | 1,226 | 39,650 | 30.0s |
Pyramid | 1,023 | 30,912 | 30.0s |
Cherrypy | 639 | 24,944 | 30.0s |
-
Create a Virtual Environment
$ python -m venv .venv
-
Active The Environment
* Linux & Mac$ source .venv/bin/activate
* Windows$ .\.venv\Scripts\activate
-
Install Panther
* Normal$ pip install panther
* Include JWT Authentication$ pip install panther[full]
-
$ panther create <project_name> <directory>
-
Panther Uses Uvicorn as ASGI (Asynchronous Server Gateway Interface)
$ panther run
-
$ panther monitor
-
Panther Uses bpython for shell
$ panther shell
-
$ panther create myproject
-
core/configs.py:
URLs = 'core/urls.py'
core/urls.py:
from app.urls import urls as app_urls urls = { '/': app_urls, }
app/urls.py:
from app.apis import hello_world, info urls = { '': hello_world, 'info/': info, }
app/apis.py:
from datetime import datetime, timedelta from panther.app import API from panther.configs import config from panther import version, status from panther.request import Request from panther.response import Response from panther.throttling import Throttling @API() async def hello_world(): return {'detail': 'Hello World'} @API(cache=True, throttling=Throttling(rate=5, duration=timedelta(minutes=1))) async def info(request: Request): data = { 'version': version(), 'datetime_now': datetime.now().isoformat(), 'user_agent': request.headers.user_agent, 'db_engine': config['db_engine'], } return Response(data=data, status_code=status.HTTP_202_ACCEPTED)
-
Then run (
$ panther run
) the project, now you can see these two urls:
More examples: https://github.com/AliRn76/panther/tree/master/example.