一个芹菜任务类,其执行被延迟到请求完成之后

django-post-request-task的Python项目详细描述


https://travis-ci.org/mozilla/django-post-request-task.svg?branch=master

一个芹菜3.x任务类,其执行被延迟到请求之后 使用来自django的request_startedrequest_finished信号完成 和线程局部变量。

如果您的视图包装在事务中(如果 您正在对它们进行数据库修改),因为您可能最终触发 在交易被提交(甚至触发)之前太快完成芹菜任务 回滚相应事务时的任务)。

通过监听request_started和request_finished的django信号,我们 可以在从@atomic创建的所有事务之后安全地触发任务,或者 ATOMIC_REQUESTS已提交。

用法

fromceleryimportCeleryfrompost_request_task.taskimportPostRequestTaskapp=Celery('myapp',task_cls=PostRequestTask)@app.taskdefmy_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

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

frompost_request_task.taskimporttask@taskdefmy_task():pass

就这样。如果任务是从django请求响应外部调用的 循环,则正常触发。

作为一个额外的特性,如果用相同的参数调用同一个任务,那么 在请求-响应周期中,它将只排队一次。

运行测试

$ make testenv
$ make test

默认情况下,无论安装了什么django版本,都会运行测试。如果要对其他版本运行测试 使用毒性:

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法使用JAXB配置Moxy   java如何让我的简单Swing telnet客户端正确显示字符?   java中从可运行线程调用主线程的多线程处理   java数据源。EBJ3会话bean中的getConnection()   使用java和正则表达式从xml文件提取值时出现问题   java定制Jersy胡须Mvc   在Java中,“限制并发”是什么意思?   java有没有更干净的方法可以在这里使用Optional,而不在三个地方返回“NA”?   java Tomcat启动,然后崩溃,除非我打电话   java理解客户机和服务器   java时间戳将在视图对象>实体转换期间丢失   如何在java中返回布尔值(基元)?   java使用spring mvc设置日志记录,希望仅对我的代码进行跟踪/调试   用Jackson解析嵌套对象