.. image:: https://media.charlesleifer.com/blog/photos/huey3-logo.png *a lightweight alternative*. huey is: * a task queue * written in python * clean and simple API huey has: * support for redis (or valkey/redict), postgres, sqlite, file-system, or in-memory storage * zero dependencies (``redis-py`` required to use redis-like brokers, ``psycopg`` for postgres). * `example code `_. * `django `_ integration (native or via django.tasks) with admin integration for visibility and management. * `documentation `_. huey supports: * multi-process, multi-thread or greenlet task execution models * schedule tasks to execute at a given time, or after a given delay * schedule recurring tasks, like a crontab * automatically retry tasks that fail * task prioritization * task result storage * task expiration * task locking, rate-limits and timeouts * task pipelines and chains * groups (fan-out), chords (map / reduce) .. image:: http://i.imgur.com/2EpRs.jpg At a glance ----------- .. code-block:: python from huey import RedisHuey, crontab # Or PostgresHuey, SqliteHuey, FileHuey, etc... huey = RedisHuey('my-app', host='redis.myapp.com') @huey.task() def add_numbers(a, b): return a + b @huey.task(retries=2, retry_delay=60) def flaky_task(url): # This task might fail, in which case it will be retried up to 2 times # with a delay of 60s between retries. return this_might_fail(url) @huey.periodic_task(crontab(minute='0', hour='3')) def nightly_backup(): sync_all_data() Calling a ``task``-decorated function will enqueue the function call for execution by the consumer. A special result handle is returned immediately, which can be used to fetch the result once the task is finished: .. code-block:: pycon >>> from demo import add_numbers >>> res = add_numbers(1, 2) >>> res >>> res() 3 Tasks can be scheduled to run in the future: .. code-block:: pycon >>> res = add_numbers.schedule((2, 3), delay=10) # Will be run in ~10s. >>> res(blocking=True) # Will block until task finishes, in ~10s. 5 For much more, check out the `guide `_ or take a look at the `example code `_. Running the consumer ^^^^^^^^^^^^^^^^^^^^ Run the consumer with four worker processes: .. code-block:: console $ huey_consumer my_app.huey -k process -w 4 To run the consumer with a single worker thread (default): .. code-block:: console $ huey_consumer my_app.huey If your work-loads are mostly IO-bound, you can run the consumer with threads or greenlets instead. Because greenlets are so lightweight, you can run quite a few of them efficiently: .. code-block:: console $ huey_consumer my_app.huey -k greenlet -w 32 Storage ------- Huey's design and feature-set were informed by the capabilities of the `Redis `_ database. Redis is a fantastic fit for a lightweight task queueing library like Huey: it's self-contained, versatile, and can be a multi-purpose solution for other web-application tasks like caching, event publishing, analytics, rate-limiting, and more. Although Huey was designed with Redis in mind, the storage system implements a simple API and many other tools could be used instead of Redis if that's your preference. Huey comes with builtin support for Redis, Postgres, Sqlite, File-system, and in-memory storage. Frameworks ---------- Huey provides Django integration either natively or via ``django.tasks``. Huey also provides an optional admin integration for Django: .. image:: https://huey.readthedocs.io/en/latest/_images/django-admin.png Huey also provides `flask-peewee `_ admin integration based on the same underlying stat-tracking system: .. image:: https://huey.readthedocs.io/en/latest/_images/flask-admin-panel.png Other frameworks can use the `stats `_ extension to collect and display this information. Documentation ---------------- `See Huey documentation `_. Project page --------------- `See source code and issue tracker on Github `_. Huey is named in honor of my cat: .. image:: http://m.charlesleifer.com/t/800x-/blog/photos/p1473037658.76.jpg?key=mD9_qMaKBAuGPi95KzXYqg