在不更改代码本身的情况下,有没有办法忽略 Celery 中的任务?
例如,当使用 Django 邮件时,有一个Dummy Backend设置。这是完美的,因为它允许我.env
在某些环境(如测试或暂存)中从文件停用邮件发送。处理邮件发送的代码本身不会被if
语句或装饰器更改。
对于 celery 任务,我知道我可以使用模拟或装饰器在代码中完成它,但我想以一种符合 12factors 的干净方式来完成它,就像使用 Django 邮件一样。任何想法?
编辑解释我为什么要这样做:
这背后的主要动机之一是它在 Django Web 服务器和 Celery 任务之间创建了耦合。例如,在运行单元测试时,如果代理服务器(对我来说是 Redis)没有运行,那么如果delay()
调用方法,它将永远冻结,因为 Celery 尝试向 Redis 发送任务时没有超时。从架构的角度来看,这是非常糟糕的。我希望我的单元测试可以正常运行,而无需运行 Celery 代理!
谢谢!