在app init之后,有没有办法以编程方式更改Celery配置?

时间:2016-04-01 20:33:08

标签: python unit-testing testing configuration celery

我已经建立了一个测试环境,我让Celery工作者实际上在其他进程中运行,因此可以测试我的Celery系统的全部功能。这样,任务实际上在工作进程中运行并与测试运行器进行通信,因此我不需要CELERY_ALWAYS_EAGER来测试此功能。

话虽这么说,在某些情况下,我的任务会触发其他任务而不关心他们完成时,并且我想创建测试 - 即等待这些子任务完成。 在这些情况下,最简单的方法似乎是急切地运行这些测试(即将CELERY_ALWAYS_EAGER设置为true)。

然而,在Celery初始化之后,我没有看到改变配置的简单方法......事实上,从源代码的一瞥看,它似乎假设配置赢了&#39 ;应用程序启动后,请更改

这对很多选项都有意义,因为工人必须真正看到变化,而从主程序中更改它不会做任何事情。但是在CELERY_ALWAYS_EAGER的情况下,这对主程序能够改变它是有意义的。

有没有直接/良好支持的方式来做到这一点?如果不是,那么最好不要太苛刻的方法呢?

另一个选择是让有问题的任务返回它开始的任务ID,以便测试可以等待它们......但我不喜欢为了唯一目的更改我的API的想法使其在单元测试中可运行。

1 个答案:

答案 0 :(得分:4)

只需更改Celery的.conf对象(Settings的实例)上的变量即可:

app.conf.CELERY_ALWAYS_EAGER = True

尽管conf is indeed a @cached_property of Celery(无论如何在版本3.1.22中),这会缓存返回的实例,而不是所有值 - 因此配置确实是动态可更新的。