Django huey extension which supports multiple huey queues.
Project description
hueyx
A django extension to run huey with multiple queues. Multiple queues allow tasks to not block each other and to scale independently. Only the redis storage is supported.
Important
- If you use
huey 1.xthen installhueyx 0.1.2. Checkout the git tag huey1.x. - If you use
huey 2.xthen installhueyx >= 1.0.
Usage
Install it with
pip install hueyx
Add hueyx in your installed apps.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hueyx',
]
settings.py
Compared to djhuey, hueyx allows several queues to be defined in the settings.py.
HUEYX = {
'queue_name1': {
'connection': {
'host': 'localhost',
'port': 6379,
'db': 0,
},
'consumer': {
'workers': 1,
'worker_type': 'process',
}
},
'queue_name2': {
'connection': {
'connection_pool': ConnectionPool(host='localhost', port=6379, db=1)
},
'consumer': {
'multiple_scheduler_locking': True,
'prometheus_metrics': True,
'workers': 2,
'worker_type': 'thread',
}
},
'priority_queue_name3': {
'huey_class': 'huey.PriorityRedisHuey',
'connection': {
'connection_pool': ConnectionPool(host='localhost', port=6379, db=1)
},
'consumer': {
'multiple_scheduler_locking': True,
'prometheus_metrics': True,
'workers': 2,
'worker_type': 'thread',
}
},
}
The settings are almost the same as in djhuey. Have a look at the huey documentation to see the exact parameter usage.
Exceptions:
- You can only configure redis as storage engine by configure
huey_classtohuey.RedisHuey,huey.PriorityRedisHuey,huey.RedisExpireHueyorhuey.PriorityRedisExpireHuey. - The
nameandbackend_classparameters are not supported. - The options
multiple_scheduler_lockingandprometheus_metrics_enabledhave been added. See below. - The parameters
heartbeat_timeoutfordb_taskhas been added. See below.
tasks.py
from hueyx.queues import hueyx
"""
Define which queue you want to use.
They are predefined in settings.py.
"""
HUEY_Q1 = hueyx('queue_name1')
HUEY_Q2 = hueyx('queue_name2')
@HUEY_Q1.task()
def my_task1():
print('my_task1 called')
@HUEY_Q1.db_task()
def my_db_task1():
print('my_db_task1 called')
@HUEY_Q2.task()
def my_task2():
print('my_task2 called')
@HUEY_Q2.periodic_task(crontab(minute='0', hour='3'))
def my_periodic_task2():
print('my_periodic_task2 called')
return 1
@HUEY_Q2.db_task(heartbeat_timeout=120)
def my_heartbeat_task(heartbeat: Heartbeat):
with heartbeat.long_running_operation():
print('This operation can take a while -> don\'t check for heartbeats')
print('Now we check for heartbeats -> call heartbeat() periodically')
heartbeat()
Push task to queue
from example.tasks import my_task1, my_db_task1, my_task2
my_task1() # Task for queue_name1
my_db_task1() # Task for queue_name1
my_task2() # Task for queue_name2
Run consumer
Consumers are started with the queue_name.
./manage.py run_hueyx queue_name1
Heartbeat tasks
Heartbeat tasks are tasks with the parameter heartbeat_timeout. It defines the timeout in seconds.
They get a Heartbeat object which needs to be called in order to send a heartbeat to redis.
If no heartbeat occurs in set timeout the task is presumed to be dead and will automatically get restarted.
heartbeat_timeout needs to be at least 120 seconds. It does not work together with the parameter include_task.
Additional settings
multiple_scheduler_locking
multiple_scheduler_locking has been added to support multiple huey schedulers.
If you run huey in a cloud environment, you will end up running multiple huey instances which each will
schedule the periodic task.
multiple_scheduler_locking prevents periodic tasks to be scheduled multiple times. It is false by default.
Huey signals
Optionally hueyx pushes all huey signals to the redis pubsub hueyx.huey2.signaling if enabled.
HUEYX_SIGNALS = {
'enabled': True,
'environment': 'your environment'
}
The format of the message is
{
'environment': settings.HUEYX_SIGNALS['environment'],
'queue': queue,
'pid': pid,
'signal': signal_name,
'task': task_name
}
The environment parameter is a optional variable.
Prometheus
The huey-exporter project takes the signals und reports it to prometheus.
Collaborators
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hueyx-1.0.3.tar.gz.
File metadata
- Download URL: hueyx-1.0.3.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.1 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
896539d876dba483562970c69b40cde92a0679b73f44e8e6650fce304a790290
|
|
| MD5 |
2e56c8e4c36de4c0bb16f52b7ef3093f
|
|
| BLAKE2b-256 |
e07baf2d739e01051da362b4a41d93441c3b89f2a816ec20a167a4a3c8705b9b
|
File details
Details for the file hueyx-1.0.3-py3-none-any.whl.
File metadata
- Download URL: hueyx-1.0.3-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.1 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c37e625fe7bcab2ecc284bb5d35f32331c1d6bb9adc91905b1987994f8d2de8
|
|
| MD5 |
ce4bd17c074a109b189e536d90f46e82
|
|
| BLAKE2b-256 |
cf5533006a52de34c7174610a18882e366476f90910548d8fd5dd0ce6baa7eeb
|