芹菜工作者似乎忽略了CELERY_ROUTES
配置设置,但其他设置(来自同一个配置文件)却没有。如下所示,运行
app.control.inspect().conf()
显示空的CELERY_ROUTES设置,但配置文件中的所有其他自定义设置都匹配app.control.inspect().conf()
的输出。
celeryconfig.py的内容:
CELERY_ACCEPT_CONTENT = ['pickle']
CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_LOG_LEVEL = 'INFO'
CELERY_ROUTES = { 'psync.sync_hardlink': {'queue': 'hardlinks'}, }
使用以下内容读取celeryconfig.py
设置:
import celeryconfig
app.conf.update( **{ k:getattr( celeryconfig,k ) for k in dir( celeryconfig ) if not k.startswith('__') } )
注意:我明确没有使用config_from_object()
方法,因为我从几个文件中读取配置设置,而config_from_object()
会覆盖以前设置的选项,所以只使用一次。
我从外部脚本检查配置设置,如下所示:
import psync #this is my library defining `app` and celery tasks
i = psync.app.control.inspect()
pprint.pprint( i.conf() )
启动worker后,运行外部脚本输出:
{u'psync_worker@ie05': {u'BROKER_URL': u'amqp://username:********@10.10.108.4:5672/PSYNCVHOST',
u'CELERYD_LOG_LEVEL': u'INFO',
u'CELERYD_PREFETCH_MULTIPLIER': 1,
u'CELERY_ACCEPT_CONTENT': [u'pickle'],
u'CELERY_INCLUDE': [u'celery.app.builtins', u'psync'],
u'CELERY_ROUTES': {}}}
从输出中可以看出,有几个设置已经从默认设置更改并与celeryconfig.py
中设置的设置相匹配,看起来CELERY_ROUTES也已更改,但它是空的。
为什么要尊重某些celeryconfig设置而忽略其他设置?
相关版本:
amqp==1.4.9
anyjson==0.3.3
billiard==3.3.0.20
celery==3.1.18
kombu==3.0.33