Django与dramatiq-pg集成
项目描述
安装
使用pip安装
$ pip install django-dramatiq-pg
将项目添加到settings.py中的INSTALLED_APPS列表
INSTALLED_APPS = [ ... 'django_dramatiq_pg', ]
创建一个注册表,并注册您的任务
from django_dramatiq_pg.registry import Registry tasks = Registry() @tasks.actor def mytask(): ...
配置
DRAMATIQ_BROKER = { "OPTIONS": { "url": "postgres:///mydb", }, "MIDDLEWARE": [ "dramatiq.middleware.TimeLimit", "dramatiq.middleware.Callbacks", "dramatiq.middleware.Retries", ], } DRAMATIQ_REGISTRY = 'myapp.registry.tasks'
启动工作进程
$ dramatiq django_dramatiq_pg.worker
此工作模块将自动发现 INSTALLED_APPS 中的任何名为 'actors' 的模块。
注册
在一个典型的 dramatiq 应用中,在注册任何任务之前会配置 Broker。然而,由于 Django 控制初始化顺序,存在一个顺序问题;actor 装饰器假设已经配置了 broker。
为了解决这个问题,django_dramatiq_pg 为您的任务提供了一个 Registry,当 Django 初始化时,将其绑定到 Broker。
在您的代码中,声明一个 Registry 实例,并使用其 .actor 方法装饰您的任务函数。然后告诉 django_dramatiq_pg 使用 DRAMATIQ_REGISTRY 设置使用您的注册表。
如果您没有指定,django_dramatiq_pg 将在启动时创建一个。
注册表可以通过 django_dramatiq_pg App 实例的 .registry 属性访问。
设置
- DRAMATIQ_BROKER
实例化 broker 时传递的选项字典。
- DRAMATIC_BROKER['OPTIONS']
传递给 broker 的参数。
- DRAMATIC_BROKER['MIDDLEWARE']
传递给 broker 的中间件类列表。
这些可以是导入字符串,或实例。
- DRAMATIQ_ENCODER
默认:None
编码器类的导入路径。
- DRAMATIQ_ACTORS_MODULE
默认:‘actors’
用于在 INSTALLED_APPS 中自动发现 actors 的模块名称。
DRAMATIQ_REGISTRY
任务注册实例的导入路径。
这应该指的是一个 django_dramatiq_pg.registry.Registry 实例。
这解决了在配置 broker 之前声明任务的鸡生蛋问题。