Here's a small comparison between taskiq, celery and dramatiq.
This benchmark is a modified version of an original dramatiq benchmark.
To run the benchmark locally:
docker compose up -d --wait # To startup services used for testing.
pip install -r requirements.txt # To install python dependencies
python runner.py --retries 10 -t 10 -t 100 -t 1_000 -t 10_000
docker compose down # To remove all services used for benching
Note
Hardware used for benchmarks:
CPU: AMD Ryzen 5 7530U with Radeon Graphics (12) @ 4.546GHz
RAM: 16Gib
OS: Arch Linux x86_64
Kernel: 6.12.4-arch1-1
Python: 3.12.7
Results for redis (in seconds) (full script output is below):
number of tasks | Taskiq | Dramatiq (sys threads) | Celery (sys threads) | Dramatiq (green threads) | Celery (green threads) |
---|---|---|---|---|---|
10 | 0.4562 | 0.5058 | 1.7826 | 0.6072 | 1.6305 |
100 | 0.5064 | 0.5562 | 1.8801 | 0.7590 | 1.8820 |
1000 | 0.6587 | 0.7112 | 2.6901 | 1.0627 | 4.4507 |
10000 | 1.9126 | 2.2488 | 11.5926 | 2.4156 | 30.8411 |
Unformatted output
python runner.py -r 20 -t 10 -t 100 -t 1_000 -t 10_000 --bench fib -o results.txt
Taskiq:
N=10:
Min : 0.4547
Max : 0.5601
Mean : 0.4836
Median: 0.4562
p(90) : 0.5520
N=100:
Min : 0.5054
Max : 0.5583
Mean : 0.5142
Median: 0.5064
p(90) : 0.5577
N=1000:
Min : 0.6068
Max : 0.7131
Mean : 0.6490
Median: 0.6587
p(90) : 0.7037
N=10000:
Min : 1.7787
Max : 2.0475
Mean : 1.8994
Median: 1.9126
p(90) : 1.9992
Dramatiq (sys threads):
N=10:
Min : 0.4547
Max : 0.5080
Mean : 0.5034
Median: 0.5058
p(90) : 0.5076
N=100:
Min : 0.5053
Max : 0.5720
Mean : 0.5400
Median: 0.5562
p(90) : 0.5619
N=1000:
Min : 0.7087
Max : 0.8155
Mean : 0.7364
Median: 0.7112
p(90) : 0.8105
N=10000:
Min : 2.0921
Max : 2.3000
Mean : 2.2176
Median: 2.2488
p(90) : 2.2643
Dramatiq (green threads):
N=10:
Min : 0.5559
Max : 0.7157
Mean : 0.6161
Median: 0.6072
p(90) : 0.7032
N=100:
Min : 0.7577
Max : 0.8656
Mean : 0.7795
Median: 0.7590
p(90) : 0.8642
N=1000:
Min : 1.0608
Max : 1.1691
Mean : 1.0891
Median: 1.0627
p(90) : 1.1635
N=10000:
Min : 2.2583
Max : 2.8735
Mean : 2.5140
Median: 2.4156
p(90) : 2.8707
Celery (sys threads):
N=10:
Min : 1.7338
Max : 1.8338
Mean : 1.7866
Median: 1.7826
p(90) : 1.8333
N=100:
Min : 1.8266
Max : 1.9353
Mean : 1.8699
Median: 1.8801
p(90) : 1.9296
N=1000:
Min : 2.6389
Max : 2.7921
Mean : 2.7100
Median: 2.6901
p(90) : 2.7861
N=10000:
Min : 11.4401
Max : 11.7421
Mean : 11.5875
Median: 11.5926
p(90) : 11.6921
Celery (green threads):
N=10:
Min : 1.6250
Max : 1.6336
Mean : 1.6296
Median: 1.6305
p(90) : 1.6329
N=100:
Min : 1.8778
Max : 1.9344
Mean : 1.8841
Median: 1.8820
p(90) : 1.8852
N=1000:
Min : 4.4404
Max : 4.5507
Mean : 4.4700
Median: 4.4507
p(90) : 4.5016
N=10000:
Min : 30.5624
Max : 31.5718
Mean : 30.8576
Median: 30.8411
p(90) : 31.1695
Results for RabbitMQ (in seconds) (full script output is below):
number of tasks | Taskiq | Dramatiq (sys threads) | Celery (sys threads) | Dramatiq (green threads) | Celery (green threads) |
---|---|---|---|---|---|
10 | 0.5057 | 0.5312 | 1.8818 | 0.6325 | 1.6296 |
100 | 0.5059 | 0.5566 | 1.8873 | 0.7589 | 1.8305 |
1000 | 0.6584 | 0.7616 | 2.1360 | 0.9610 | 2.3346 |
10000 | 2.1565 | 2.3421 | 4.7314 | 2.3405 | 23.5759 |
Unformatted output
python runner.py -r 10 -t 10 -t 100 -t 1_000 -t 10_000 --bench fib --rmq -o results.txt
Taskiq:
N=10:
Min : 0.4551
Max : 0.5084
Mean : 0.4959
Median: 0.5057
p(90) : 0.5082
N=100:
Min : 0.5051
Max : 0.5557
Mean : 0.5111
Median: 0.5059
p(90) : 0.5511
N=1000:
Min : 0.6084
Max : 0.7140
Mean : 0.6546
Median: 0.6584
p(90) : 0.7135
N=10000:
Min : 2.1088
Max : 2.2137
Mean : 2.1539
Median: 2.1565
p(90) : 2.2091
Dramatiq (sys threads):
N=10:
Min : 0.5055
Max : 0.6117
Mean : 0.5420
Median: 0.5312
p(90) : 0.6114
N=100:
Min : 0.5561
Max : 0.6603
Mean : 0.5671
Median: 0.5566
p(90) : 0.6501
N=1000:
Min : 0.7594
Max : 0.8159
Mean : 0.7721
Median: 0.7616
p(90) : 0.8158
N=10000:
Min : 2.3389
Max : 2.4993
Mean : 2.3906
Median: 2.3421
p(90) : 2.4950
Dramatiq (green threads):
N=10:
Min : 0.6070
Max : 0.7134
Mean : 0.6384
Median: 0.6325
p(90) : 0.7081
N=100:
Min : 0.7080
Max : 0.8609
Mean : 0.7645
Median: 0.7589
p(90) : 0.8561
N=1000:
Min : 0.9099
Max : 1.0665
Mean : 0.9668
Median: 0.9610
p(90) : 1.0612
N=10000:
Min : 2.3099
Max : 2.5041
Mean : 2.3649
Median: 2.3405
p(90) : 2.4960
Celery (sys threads):
N=10:
Min : 1.8330
Max : 1.8865
Mean : 1.8772
Median: 1.8818
p(90) : 1.8864
N=100:
Min : 1.8783
Max : 1.9369
Mean : 1.9047
Median: 1.8873
p(90) : 1.9367
N=1000:
Min : 2.1326
Max : 2.1863
Mean : 2.1501
Median: 2.1360
p(90) : 2.1862
N=10000:
Min : 4.6534
Max : 4.8575
Mean : 4.7364
Median: 4.7314
p(90) : 4.8477
Celery (green threads):
N=10:
Min : 1.6244
Max : 1.6328
Mean : 1.6282
Median: 1.6296
p(90) : 1.6326
N=100:
Min : 1.7803
Max : 1.8846
Mean : 1.8361
Median: 1.8305
p(90) : 1.8844
N=1000:
Min : 2.2786
Max : 2.3866
Mean : 2.3346
Median: 2.3346
p(90) : 2.3865
N=10000:
Min : 23.4233
Max : 23.8804
Mean : 23.5748
Median: 23.5759
p(90) : 23.8553