用于 Django 的轻量级和模块化队列和 cron 系统
项目描述
Django 轻量级队列
DLQ 是 Django 的轻量级模块化队列和 cron 系统。它每天为 Thread 的数百万个生产工作提供动力。
安装
pip install django-lightweight-queue[redis]
目前唯一可用于生产的后端是基于 redis 的,因此redis
基本上需要额外的后端。其他非 redis 支持的生产就绪后端是社区贡献的绝佳候选者。
基本用法
首先添加django_lightweight_queue
到您的INSTALLED_APPS
:
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
...,
"django_lightweight_queue",
]
之后,在您想要的任何文件中定义您的任务:
import time
from django_lightweight_queue import task
# Define a task
@task()
def long_running_task(first_arg, second_arg):
time.sleep(first_arg * second_arg)
# Request that the task be executed at some point
long_running_task(4, second_arg=9)
有关更多详细信息,请参阅task
装饰器上的文档字符串。
配置
所有自动获取的配置选项LIGHTWEIGHT_QUEUE_
都以app_settings.py
. 它们应该放在通常的 Django 设置文件中,例如:
LIGHTWEIGHT_QUEUE_BACKEND = 'django_lightweight_queue.backends.redis.RedisBackend'
特殊配置
如果需要,可以将特定的配置覆盖放置在通过命令行传递的独立 python 文件中。这对于为特定服务器应用定制很有用。
例如,给定一个special.py
包含:
LIGHTWEIGHT_QUEUE_REDIS_PORT = 12345
然后运行:
$ python manage.py queue_runner --extra-settings=special.py
将导致运行器优先使用指定配置文件中的设置,而不是 Django 环境中的设置。指定文件中不存在的任何设置都继承自全局配置。
后端
有四个内置后端:
同步(开发后端)
django_lightweight_queue.backends.synchronous.SynchronousBackend
内联执行任务,没有任何实际排队。
Redis(生产后端)
django_lightweight_queue.backends.redis.RedisBackend
使用Redis最多执行一次任务以存储排队的任务。
可靠的 Redis(生产后端)
django_lightweight_queue.backends.reliable_redis.ReliableRedisBackend
使用Redis至少执行一次任务以存储入队任务(受 Redis 一致性约束)。不保证任务完成。
调试网页(调试后端)
django_lightweight_queue.backends.debug_web.DebugWebBackend
它不是运行作业,而是将 url 打印到一个视图,该视图可用于在事务中运行将回滚的任务。这对于调试和优化任务很有用。
使用它来将适当的 URL 附加到根目录的底部urls.py
:
from django.conf import settings
from django.urls import path, include
urlpatterns = [
...
]
if settings.DEBUG:
urlpatterns += [
path(
"",
include(
"django_lightweight_queue.urls", namespace="django-lightweight-queue"
),
)
]
如果您的调试站点不在 localhost 上,则此后端可能需要额外设置:
# defaults to http://localhost:8000
LIGHTWEIGHT_QUEUE_SITE_URL = "http://example.com:8000"
运行工人
队列运行器被实现为 Django 管理命令:
$ python manage.py queue_runner
通过告诉每个运行者它是池的一部分,工人可以分布在多个主机上:
$ python manage.py queue_runner --machine 2 --of 4
LIGHTWEIGHT_QUEUE_*
或者,可以通过加载额外的设置(在文件中找到的任何常量将替换等效的 django 设置)并配置为完全按照设置描述的方式运行,从而明确告诉跑步者如何表现:
$ python manage.py queue_runner --exact-configuration --extra-settings=special.py
使用时--exact-configuration
,工人的数量是精确配置的,而不是被视为池的配置。此外,精确配置的运行器不会运行任何 cron 工作程序。
例子
给定一个 Django 配置,其中包含:
LIGHTWEIGHT_QUEUE_WORKERS = {
'queue1': 3,
}
和一个special.py
包含:
LIGHTWEIGHT_QUEUE_WORKERS = {
'queue1': 2,
}
运行任何:
$ python manage.py queue_runner --machine 1 --of 3 # or,
$ python manage.py queue_runner --machine 2 --of 3 # or,
$ python manage.py queue_runner --machine 3 --of 3
将在queue1
当前机器上产生一名工作人员,同时:
$ python manage.py queue_runner --exact-configuration --extra-settings=special.py
将导致当前机器上有两个工人。
定时任务
DLQ 支持使用类似 cron 的 Django 管理命令规范在特定时间运行。
要指定管理命令应在给定时间运行,
cron.py
请在 Django 应用程序的根文件夹中放置一个文件,该文件定义该命令并包含一个CONFIG
变量:
CONFIG = (
{
'command': 'my_cron_command',
# Day values 1-7 to match datetime.datetime.utcnow().isoweekday()
'days': '*',
'hours': '*',
'minutes': '*',
# Equivalent behaviour to the kwarg to `task` of the same name
'sigkill_on_stop': True,
},
)
维护者
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
django_lightweight_queue -4.9.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 127981a2a902f501237630f745b1057eb7cb2739a05a025ba157e617e4f80a96 |
|
MD5 | 627a5dd4d0101f36e5092069e46245b5 |
|
布莱克2-256 | f33808dc5f518f45fc8e876e51293ade74ecd34bb5e1766ede55a3c287f8abb8 |