【问题标题】:Is there any way to change the Celery config programmatically, after app init?有没有办法在应用程序初始化后以编程方式更改 Celery 配置?
【发布时间】:2016-07-21 19:05:27
【问题描述】:

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

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

但是,我看不到在 Celery 初始化后更改配置的简单方法......事实上,从源代码一目了然,它似乎假设配置 不会改变 应用启动后。

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

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

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

【问题讨论】:

    标签: python unit-testing testing configuration celery


    【解决方案1】:

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

    app.conf.CELERY_ALWAYS_EAGER = True
    

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

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 2010-09-14
      • 2020-04-23
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多