跳转到主要内容

轻量级且模块化的Django队列和cron系统

项目描述

Django Lightweight Queue

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 一致性影响),以至少一次的方式执行任务。不保证任务 完成

调试 Web(调试后端)

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 应用程序的根目录中放置一个定义该命令并包含 CONFIG 变量的 cron.py 文件

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,
    },
)

维护者

此存储库由 Chris LambThread 创建,并由 Thread 工程团队 维护。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

django-lightweight-queue-4.11.0.tar.gz (28.6 kB 查看哈希值)

上传时间 源代码

构建分发

django_lightweight_queue-4.11.0-py3-none-any.whl (40.1 kB 查看哈希值)

上传时间 Python 3

由以下支持