gpt4 book ai didi

python - 在应用程序初始化之后,有没有办法以编程方式更改 Celery 配置?

转载 作者:行者123 更新时间:2023-11-28 21:47:31 25 4
gpt4 key购买 nike

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

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

但是,我没有看到在初始化 Celery 后更改配置的直接方法...事实上,从源代码一瞥,它似乎假定配置不会更改 应用程序启动后。

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

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

另一种选择是让相关任务返回它开始的任务 ID,这样测试就可以等待它们……但我不喜欢仅仅为了使它可以在单元测试中运行。

最佳答案

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

app.conf.CELERY_ALWAYS_EAGER = True

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

关于python - 在应用程序初始化之后,有没有办法以编程方式更改 Celery 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com