一个Celery任务类,其执行将延迟到请求完成后
项目描述
一个Celery任务类,其执行将延迟到请求完成后,使用django的request_started和request_finished信号以及线程局部变量。
如果您的视图被事务包裹(如果您在它们中进行数据库修改,则应该这样做),这非常有用,因为您可能会在事务提交之前(或者甚至在相应的交易回滚时)触发Celery任务太早。
通过监听django的request_started和request_finished信号,我们可以在所有从@atomic或ATOMIC_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.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 26c03b5d06eb1705b2438bb719575fac4aae7f34c32837480202acad556edb3c |
|
MD5 | 8676643d4fff402273994eeb12687de2 |
|
BLAKE2b-256 | 9d5b460cca16a4cfaa2068a823fad46577b725211d30356827a83d3566f35cb9 |
关闭
django_post_request_task-0.5-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 91df3893c9551851cd10568ef3b2cf358bd87e8c65dce728c37196a8de34247c |
|
MD5 | 40595affb8a89ef2549e9b5ab7382a4d |
|
BLAKE2b-256 | 76d7fdc4123b55edb6cc86f4d8d132d5f10b69bad31b999c6ee9d94a8562f6f3 |