Skip to main content

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

维护者

此存储库由 Thread 的 Chris Lamb 创建,并由Thread工程 团队继续维护。

项目详情


下载文件

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

源分布

django-lightweight-queue-4.9.0.tar.gz (27.9 kB 查看哈希)

已上传 source

内置分布

django_lightweight_queue-4.9.0-py3-none-any.whl (38.7 kB 查看哈希

已上传 py3