应用程序初始化后,有什么方法可以通过编程方式更改Celery配置?

Cla*_*diu 2 python testing configuration unit-testing celery

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

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

但是,在Celery初始化之后,我看不到更改配置的直接方法...实际上,从源代码一瞥,似乎它假设一旦应用启动,配置就不会更改

这对于很多选项来说都是有意义的,因为工作人员将必须实际看到更改,而从主程序进行更改将无济于事。但是,对于CELERY_ALWAYS_EAGER,这对于主程序能够进行更改是有意义的。

是否有任何直接/得到充分支持的方式来做到这一点?如果不是,那么最好的方法不是太hacky?

另一个选择是使有问题的任务返回它开始时的任务ID,以便测试可以随后等待它们……但是我不赞成更改API以使其可运行的唯一目的。单元测试。

Cla*_*diu 5

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

app.conf.CELERY_ALWAYS_EAGER = True
Run Code Online (Sandbox Code Playgroud)

尽管conf确实是@cached_propertyof的Celery(无论如何在3.1.22版中),但是它缓存了返回的实例,而不是所有的值-因此该配置确实可以动态更新。