跳转到主要内容

一种用于在beanstalk工作机上处理延迟和周期性任务的服务

项目描述

django-beanstalk-worker

一种用于在beanstalk工作机上处理延迟和周期性任务的应用程序

概述

该应用的核心是任务装饰器。

当调用装饰后的任务函数时,而不是立即运行,会排队一个SQS消息。当工作机解排队该消息时,将导致调用原始函数。

参数可以是任何组合的JSON序列化类型、datetimes和decimals,包括关键字参数。任何其他类型的参数将导致错误。

SQS消息的排队在事务的on_commit上发生,因此如果您在事务中抛出异常,该事务中调用的任何任务将不会运行。

任务函数也可以根据需要由cron或管理命令调用。

安装和设置

1: 已安装的应用程序

beanstalk_worker 添加到 installed_apps

2: 环境变量

在您工作环境Beanstalk配置的“软件”部分中,添加环境变量 WORKER 并将其设置为 1

3: Django设置

将以下设置添加到您的Django设置中

BEANSTALK_WORKER = bool(os.environ.get("WORKER", False))
BEANSTALK_TASK_SERVICE = "beanstalk_worker.services.TaskService"
BEANSTALK_SQS_URL = <SQS queue URL>
BEANSTALK_SQS_REGION = <Amazon region>

您可以在Beanstalk环境配置的“工作机”部分中找到SQS队列URL。

在进行测试和开发时,您可以省略SQS设置,并应设置BEANSTALK_TASK_SERVICE = "beanstalk_worker.services.FakeTaskService"

4: URL's

在您的顶级URL中添加

if settings.BEANSTALK_WORKER:
    urlpatterns.append(url(r"^tasks/", include("beanstalk_worker.urls")))

这将添加URL /tasks/task//tasks/cron。如果您移动这些URL的基础路径,则需要相应地更新本页上的其他说明。

请勿将这些URL包含在生产Web服务器中,仅限于工作器。

在进行测试和开发时,您不会有独立的Web和工作机,因此始终包含URL。

5: Beanstalk工作机配置

在您工作环境Beanstalk配置的Worker部分,将HTTP路径设置为/tasks/task/,将MIME类型设置为application/json

使用方法

声明一个任务函数

from beanstalk_worker import task

@task
def my_task(message="hi"):
    print(message)

从代码中的任何位置调用任务

my_task("hello world")

这将排队一个SQS消息,指示工作器运行实际函数。

参数可以是任何组合的JSON可序列化类型、日期时间和十进制数,包括关键字参数

从CRON调用任务

cron.yaml中添加

- name: "my_project.my_app.tasks.my_task"
  url: "/tasks/cron/"
  schedule: "0 0 * * *"

my_project.my_app.tasks.my_task应替换为您任务函数的完全限定名。

目前cron不支持参数。

从命令行调用任务

./manage.py run_task my_project.my_app.tasks task "['hello world']"

my_project.my_app.tasks my_task应替换为您任务函数的完全限定名,注意模块名和函数名之间有空格。

开发、测试和FakeTaskServer

FakeTaskServer将内部排队任务,但除非收到指示,否则不会运行它们。

settings.DEBUG

当在Django设置中设置DEBUG = True时,将在/tasks/run_all/处公开额外的URL,如果您点击此URL,则FakeTaskService将运行所有排队任务。这对于本地开发非常有用。

测试支持

在测试中,您可以使用from beanstalk_worker import task_service获取正在运行的任务服务实例。此类有两个辅助函数clear,它将丢弃所有排队任务,以及run_all,它将立即运行所有排队任务。

settings.BEANSTALK_WORKER

在运行任务时,FakeTaskServer将内部将settings.BEANSTALK_WORKER修补为True。这使得您可以在仅应在工作器上运行的代码中assert settings.BEANSTALK_WORKER

项目详情


下载文件

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

源分布

django-beanstalk-worker-0.0.2.tar.gz (5.0 kB 查看哈希)

上传时间

构建分布

django_beanstalk_worker-0.0.2-py3-none-any.whl (6.7 kB 查看哈希)

上传时间 Python 3

由以下支持