一种用于在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
。
项目详情
哈希 for django_beanstalk_worker-0.0.2-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 428bd1026e45cc8d7d99c3f10cafa1917150205e3f763453cc937e9beaa71e17 |
|
MD5 | 41aad3989c2f00102975c58f2c59a9be |
|
BLAKE2b-256 | 127236598ba7be44c57d5582b370904029875d73728f6ccbf89be08414299c4b |