• Stars
    star
    5,154
  • Rank 8,055 (Top 0.2 %)
  • Language
    Python
  • License
    MIT License
  • Created about 13 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

a little task queue for python

image

a lightweight alternative.

huey is:

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
  • task pipelines and chains

image

At a glance

from huey import RedisHuey, crontab

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:

>>> from demo import add_numbers
>>> res = add_numbers(1, 2)
>>> res
<Result: task 6b6f36fc-da0d-4069-b46c-c0d4ccff1df6>

>>> res()
3

Tasks can be scheduled to run in the future:

>>> 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:

$ huey_consumer.py my_app.huey -k process -w 4

To run the consumer with a single worker thread (default):

$ huey_consumer.py 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:

$ huey_consumer.py 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, Sqlite and in-memory storage.

Documentation

See Huey documentation.

Project page

See source code and issue tracker on Github.

Huey is named in honor of my cat:

image

More Repositories

1

peewee

a small, expressive orm -- supports postgresql, mysql, sqlite and cockroachdb
Python
11,103
star
2

sqlite-web

Web-based SQLite database browser written in Python
Python
3,359
star
3

walrus

Lightweight Python utilities for working with Redis
Python
1,149
star
4

flask-peewee

flask integration for peewee, including admin, authentication, rest api and more
Python
776
star
5

micawber

a small library for extracting rich content from urls
Python
632
star
6

unqlite-python

Python bindings for the UnQLite embedded NoSQL database
C
389
star
7

django-relationships

Descriptive relationships between auth.users (think facebook friends and twitter followers, plus more)
Python
369
star
8

scout

RESTful search server written in Python, powered by SQLite.
Python
299
star
9

pysqlite3

SQLite3 DB-API 2.0 driver from Python 3, packaged separately, with improvements
C
184
star
10

irc

tinkering with a made-from-scratch irc library in python
Python
179
star
11

django-generic-m2m

relate anything to anything
Python
153
star
12

simpledb

miniature redis-like server implemented in Python
Python
138
star
13

python-lsm-db

Python bindings for the SQLite4 LSM database.
C
129
star
14

vedis-python

Python bindings for the Vedis embedded NoSQL database
C
125
star
15

wtf-peewee

WTForms integration for peewee
Python
111
star
16

sqlcipher3

Python 3 bindings for SQLCipher
C
85
star
17

sophy

Fast Python bindings to Sophia Database
C
80
star
18

django-generic-aggregation

annotate() and aggregate() for generically-related data.
Python
72
star
19

beefish

simple file encryption with pycrypto
Python
67
star
20

ucache

gametight lightweight caching library for python
Python
65
star
21

chrome-extensions

Personal collection of chrome extensions
JavaScript
61
star
22

sqlite-vtfunc

Implement SQLite table-valued functions with Python
Cython
58
star
23

sweepea

Fast, lightweight Python database toolkit for SQLite, built with Cython.
Cython
42
star
24

dot-theme

dotfile templating tools
Python
31
star
25

greendb

server frontend for lmdb
Python
25
star
26

kvkit

dank key/value store high-level APIs
Python
18
star
27

kt

Fast Python client for KyotoTycoon
Python
18
star
28

ukt

Kyoto Tycoon client library for Python.
Python
11
star
29

sqlite3-bloomfilter

Bloomfilter for SQLite3
C
6
star