| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This repository contains scripts for load testing various Python task queue libraries.
The purpose of these tests is to provide a general sense of the performance and scalability of different task queue systems under heavy loads.
Additionally, I am exploring how to use each library as a user, evaluating how easy they are to set up, how intuitive their APIs are, and the overall user experience with their CLI.
Note that these tests are not critical evaluations but rather exploratory assessments to give a general feel of how each system performs.
The task queue libraries in this benchmark:
The benchmark is very naive, it measure the total time spent on processing 20,000 jobs by 10 workers. Each job simply prints the current time.
All tests were conducted on a MacBook Pro 14 inch M2 Pro with 16GB of RAM.
Before running the tests, ensure you have Docker installed. Start Redis using Docker Compose:
docker compose upInstall uv, and then run:
uv sync
source .venv/bin/activatecd rqpython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && rq worker-pool -q -n 10cd arqpython enqueue_jobs.py python -c "import time; print(f'Start time: {time.time()}')" > time.log && supervisord -c supervisord.confcd celerypython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && celery -q --skip-checks -A tasks worker --loglevel=info -c 10 -P threadscd hueypython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && huey_consumer.py tasks.huey -k thread -w 10 -d 0.001 -C -qcd dramatiqpython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && dramatiq tasks -p 1 -t 10The taskiq is set up using the RedisStreamBroker from taskiq-redis.
cd taskiqpython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && taskiq worker --workers 10 tasks:brokerProcrastinate stores jobs in PostgreSQL instead of Redis.
cd procrastinateexport PYTHONPATH=.
procrastinate --app=tasks.app schema --applypython enqueue_jobs.pypython -c "import time; print(f'Start time: {time.time()}')" > time.log && procrastinate --app=tasks.app worker --concurrency 10| Back | FazBrowse Home | New Git URL |