跳转到主要内容

一个Celery任务类,其执行将延迟到请求完成后

项目描述

https://circleci.com/gh/mozilla/django-post-request-task.svg?style=svg

一个Celery任务类,其执行将延迟到请求完成后,使用django的request_startedrequest_finished信号以及线程局部变量。

如果您的视图被事务包裹(如果您在它们中进行数据库修改,则应该这样做),这非常有用,因为您可能会在事务提交之前(或者甚至在相应的交易回滚时)触发Celery任务太早。

通过监听django的request_startedrequest_finished信号,我们可以在所有从@atomicATOMIC_REQUESTS创建的事务提交后安全地触发任务。

用法

from celery import Celery
from post_request_task.task import PostRequestTask


app = Celery('myapp', task_cls=PostRequestTask)

@app.task
def my_task():
    # If .delay() is called on this task inside a django request-response
    # cycle it will be called once the request is finished, and not before.
    pass

或者,如果您直接使用装饰器

from post_request_task.task import shared_task

@shared_task
def my_task():
    pass

就这样。如果任务在django请求-响应周期之外调用,则它将正常触发。

作为附加功能,如果在请求-响应周期中多次使用相同的参数调用相同的任务,它只会排队一次。

运行测试

$ make testenv
$ make test

默认情况下,测试使用已安装的任何Django版本运行。如果您想为其他版本运行测试,请使用tox。

$ make testenv
$ tox -e 3.7-2.0.x # or any other environment defined in our tox.ini

项目详情


下载文件

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

源代码分发

django-post-request-task-0.5.tar.gz (6.4 kB 查看哈希值)

上传时间 源代码

构建分发

django_post_request_task-0.5-py3-none-any.whl (6.9 kB 查看哈希值)

上传时间 Python 3

由以下支持