blackbull
Emerging · Python · standard configuration · completeness 4/4
BlackBull — pure-Python async ASGI 3.0 framework supporting HTTP/1.1, HTTP/2, and WebSocket. ALPN negotiates HTTP/2 on the same listener that serves HTTP/1.1.
Achievements
🥇 1 Gold · 🥉 1 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Test profile | Workload · 8Gbit | 1 of 65 |
| 🥉 Bronze | Within its language | Python · HTTP/1.1 | 3 of 9 |
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 51 of 71 | 1658 |
| HTTP/2 | 16 of 18 | 145 |
| WebSocket | 14 of 15 | 182 |
Every result
Alpha Round, 20 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 351,689 | 11.50ms | 30.40ms | 6311.4% | 2.0GiB |
| Connection | Pipelined | 4,096 | 491,314 | 128.74ms | 480.60ms | 6394.2% | 2.2GiB |
| Connection | Short-lived | 4,096 | 281,824 | 14.44ms | 33.20ms | 6220.6% | 2.9GiB |
| Concurrency | Async Delay | 32,000 | 291,751 | 105.21ms | 171.00ms | 6264.3% | 3.9GiB |
| Efficiency | Latency-10K | 1,024 | 9,980 | 188.9us | 289.0us | 146.0% | 1.9GiB |
| Efficiency | Latency-1M | 1,024 | 367,595 | 6218627.3us | 13053952.0us | 6370.0% | 1.9GiB |
| Efficiency | Latency-500K/8 | 1,024 | 55,304 | 8815056.5us | 17637376.0us | 728.6% | 412MiB |
| Workload | JSON Comp | 4,096 | 112,719 | 36.13ms | 96.10ms | 6297.8% | 2.5GiB |
| Workload | JSON Comp | 16,384 | 111,076 | 140.44ms | 283.70ms | 6474.5% | 3.0GiB |
| Workload | JSON TLS | 4,096 | 184,189 | 21.98ms | 191.05ms | 6251.0% | 3.2GiB |
| Workload | 8Gbit | 512 | 49,504 | 259.8us | 534.0us | 1022.6% | 2.1GiB |
| Workload | Static TLS | 1,024 | 170,521 | 6.12ms | 99.57ms | 6408.4% | 2.3GiB |
| Database | Async DB | 1,024 | 28,261 | 35.80ms | 198.20ms | 1723.8% | 2.3GiB |
| HTTP/2 | Baseline | 256 | 206,123 | 127.10ms | 326.25ms | 6481.6% | 2.3GiB |
| HTTP/2 | Baseline | 1,024 | 201,453 | 492.92ms | 1.50s | 6371.1% | 3.2GiB |
| HTTP/2 | Static | 256 | 111,846 | 71.89ms | 228.46ms | 6401.8% | 2.4GiB |
| HTTP/2 | Static | 1,024 | 109,360 | 301.68ms | 1.34s | 6473.9% | 3.0GiB |
| WebSocket | Echo | 512 | 756,327 | 676us | 1.07ms | 6566.4% | 1.9GiB |
| WebSocket | Echo | 4,096 | 748,665 | 5.36ms | 11.50ms | 6392.0% | 2.1GiB |
| WebSocket | Echo | 16,384 | 678,112 | 22.93ms | 37.70ms | 6283.8% | 3.4GiB |
Compared with
The Python entries around blackbull on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs blackbull | |
|---|---|---|---|
| fastpysgi-wsgi | 3148 | +90% | head to head |
| mq-bridge-py | 2219 | +34% | head to head |
| aiohttp | 2072 | +25% | head to head |
| sanic | 1630 | -2% | head to head |
| starlette | 1624 | -2% | head to head |
Compare blackbull with any Python entry · Compare blackbull with any entry, in any language · Every Python entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry