在体验celery时,使用的是在celeryconfig.py中配置celery参数:
app.config_from_object('celeryconfig')
在celeryconfig.py中可以配置:
CELERY_IMPORTS = (
'tasks'
)
'''
CELERY_TRACK_STARTED = True
CELERYD_CONCURRENCY = 4 # 配置会启用执行任务的线程数
CELERYD_PREFETCH_MULTIPLIER = 1 # how many messages a time
CELERY_TASK_RESULT_EXPIRES = 60
CELERYD_HIJACK_ROOT_LOGGER = False
CELERY_DEFAULT_QUEUE = 'DEFAULT_QUEUE'
# 只要配置好路由器和队列,使得celery能够接收到消息,其会根据方法签名自行选择方法进行执行
#定义queue
CELERY_QUEUES = (
Queue('momoji_celery_work_queue_test_add', Exchange('momoji_celery_exchange', type='topic'), routing_key='key.add'),
Queue('momoji_celery_work_queue_test_multi', Exchange('momoji_celery_exchange', type='topic'), routing_key='key.multi'),
)
#定义routes用来决定不同的任务去哪一个queue 和 那个队列对应的是那个处理task函数
CELERY_ROUTES = {
'momoji.celerytask.add': {'queue': 'momoji_celery_work_queue_test_add', 'routing_key': 'key.add'},
'momoji.celerytask.multi': {'queue': 'momoji_celery_work_queue_test_multi', 'routing_key': 'key.multi'},
}
在pyramid_celery架构中,它采用了在ini文件中进行配置:
以上的配置项有些是不能在ini形式下使用的,有些需要换一种形式,有些需要采用此架构的特殊定义:
1.不能使用的(至少我没找到可用的形式,没有试验成功):
CELERY_QUEUES --这个很可惜,celery可以直接据此配置在mq里建立exchange/queue和binding关系,在pyramid_celery中我手动建立的这些mq对象和关系;
2.需换形式的:
比如在celery中可以使用python的数组形式赋值:
CELERY_ACCEPT_CONTENT = ['json','pickle']
在pyramid中需要符合ini文件的规范,采用如下形式:
CELERY_ACCEPT_CONTENT = json
pickle
另ini中的字符值不要加''或""
3.需要特殊定义的:
在celery中可以如此定义route
CELERY_ROUTES = {
'momoji.celerytask.add': {'queue': 'momoji_celery_work_queue_test_add', 'routing_key': 'key.add'},
'momoji.celerytask.multi': {'queue': 'momoji_celery_work_queue_test_multi', 'routing_key': 'key.multi'},
}
在pyramid_celery中需要:
[celeryroute:momoji.celerytask.add]
queue = momoji_celery_work_queue_test_add
routing_key = key.add