blackbull
Emerging · Python · standard configuration
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.
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. 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 | 52 of 71 | 147 |
| HTTP/2 | 14 of 16 | 15 |
| WebSocket | 19 of 20 | 15 |
Every result
Alpha Round, 26 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 | 512 | 287,538 | 1.78ms | 2.97ms | 6268.9% | 1.4GiB |
| Connection | Baseline | 4,096 | 283,731 | 13.98ms | 29.40ms | 6517.8% | 1.5GiB |
| Connection | Pipelined | 512 | 382,850 | 21.27ms | 235.70ms | 6370.9% | 1.4GiB |
| Connection | Pipelined | 4,096 | 374,366 | 164.39ms | 494.70ms | 6333.9% | 1.6GiB |
| Connection | Short-lived | 512 | 245,461 | 2.08ms | 5.20ms | 6374.9% | 1.6GiB |
| Connection | Short-lived | 4,096 | 246,362 | 15.30ms | 34.50ms | 6235.2% | 1.9GiB |
| Workload | JSON | 4,096 | 182,199 | 20.50ms | 45.40ms | 6190.5% | 1.8GiB |
| Workload | JSON Comp | 512 | 100,773 | 5.08ms | 10.90ms | 6301.3% | 1.6GiB |
| Workload | JSON Comp | 4,096 | 99,844 | 38.18ms | 91.60ms | 6155.3% | 1.7GiB |
| Workload | JSON Comp | 16,384 | 98,024 | 99.03ms | 328.00ms | 6078.0% | 1.8GiB |
| Workload | JSON TLS | 4,096 | 168,570 | 24.03ms | 198.22ms | 6208.0% | 2.7GiB |
| Workload | Upload | 32 | 1,036 | 30.67ms | 174.00ms | 2568.3% | 2.9GiB |
| Workload | Upload | 256 | 646 | 365.94ms | 1.36s | 6235.8% | 9.1GiB |
| Workload | Static | 1,024 | 194,411 | 5.26ms | 39.76ms | 6353.7% | 1.4GiB |
| Workload | Static | 4,096 | 186,861 | 21.62ms | 69.87ms | 6251.0% | 1.5GiB |
| Workload | Static | 6,800 | 185,518 | 36.06ms | 117.08ms | 6493.3% | 1.6GiB |
| Workload | Static TLS | 1,024 | 169,440 | 6.15ms | 81.81ms | 6400.0% | 1.8GiB |
| Workload | Static TLS | 4,096 | 164,491 | 24.60ms | 153.79ms | 6295.3% | 3.0GiB |
| Workload | Static TLS | 6,800 | 160,996 | 41.66ms | 259.50ms | 6234.0% | 4.1GiB |
| HTTP/2 | Baseline | 256 | 185,384 | 198.18ms | 1.14s | 6316.4% | 1.6GiB |
| HTTP/2 | Baseline | 1,024 | 176,248 | 532.77ms | 1.43s | 6320.9% | 1.9GiB |
| HTTP/2 | Static | 256 | 105,962 | 93.23ms | 1.00s | 6384.1% | 1.6GiB |
| HTTP/2 | Static | 1,024 | 102,468 | 300.06ms | 975.28ms | 6339.6% | 2.0GiB |
| WebSocket | Echo | 512 | 664,189 | 770us | 1.14ms | 6688.9% | 1.4GiB |
| WebSocket | Echo | 4,096 | 683,415 | 5.91ms | 11.40ms | 6686.7% | 1.6GiB |
| WebSocket | Echo | 16,384 | 645,053 | 24.14ms | 37.10ms | 6665.4% | 2.1GiB |
How the benchmark is run · The machine · Add or fix an entry