什么被认为是芹菜的app.conf.humanize(with_defaults = False)的默认值?

时间:2016-12-05 14:44:31

标签: celery celeryd

我正在尝试使用app.conf.humanize(with_defaults=False)按照user guide中的示例打印芹菜的配置。但是在使用with_defaults=False时我总是得到一个空字符串,我知道配置更改有效,因为我可以使用.humanize(with_defaults=True)来查看更改。

我猜测使用app.conf.config_from_object('myconfig')添加配置会将配置设置加载为“默认值”,因此是否可以通过某种方式加载模块myconfig上的配置不是默认值?

这是我的源代码:

#myconfig.py
worker_redirect_stdouts_level='INFO'
imports = ('tasks',)

#tasks.py
from celery import Celery

app = Celery()
app.config_from_object('myconfig')    
print "config: %s" % app.conf.humanize(with_defaults=False)

@app.task
def debug(*args, **kwargs):
    print "debug task args  : %r" % (args,)
    print "debug task kwargs: %r" % (kwargs,)

我使用env PYTHONPATH=. celery worker --loglevel=INFO启动芹菜并打印config:(如果我更改为with_defaults=True,我会得到预期的完整输出。)

1 个答案:

答案 0 :(得分:0)

加载config_from_object()config_from_envvar()的配置不被视为默认值。

观察到的行为是由this commit针对我bug report修复的错误造成的,因此未来版本的芹菜将按预期工作。

from celery import Celery
app = Celery
app.config_from_object('myconfig')
app.conf.humanize()  # returns only settings directly set by 'myconfig' omitting  defaults

其中myconfigPYTHONPATH中的python模块:

#myconfig.py
worker_redirect_stdouts_level='DEBUG'