1、推荐查看链接
本人借鉴上面链接,成功配置好celery异步任务,感觉一些点总结的还算可以
2、个人celery配置config
# -*- coding: utf-8 -*-
from kombu import Queue, Exchange
# 设置Broker和backend
# BROKER_URL = 'redis://ip:6379/1' # 将数据存放到redis1数据库,redis默认有16个数据库
# CELERY_RESULT_BACKEND = 'redis://ip:6379/1'
# 都存放到rabbitmq的好处就是,不用定期删除redis中的数据
BROKER_URL = 'amqp://mq_name:mq_passwd@ip:5672'
CELERY_RESULT_BACKEND = 'amqp://mq_name:mq_passwd@ip:5672'
CELERY_TASK_SERIALIZER = 'json' # 任务序列化和反序列化使用json
CELERY_RESULT_SERIALIZER = 'json' # 结果序列化为json
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 后端存储任务超过一天,则自动清理数据,单位为秒
CELERYD_MAX_TASKS_PER_CHILD = 1000 # 每个worker最多执行1000个任务就会被销毁,可防止内存泄露
CELERYD_PREFETCH_MULTIPLIER = 2
CELERY_QUEUES = (
Queue('default', Exchange('default'), routing_key='default'),
Queue('process', Exchange('process'), routing_key='web', consumer_arguments={'x-priority': 0}),
)
CELERY_DEFAULT_EXCHANGE = 'tasks' # 默认的交换机名字为tasks
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic' # 默认的交换类型是topic
CELERY_DEFAULT_ROUTING_KEY = 'task.default' # 默认的路由键是task.default,这个路由键符合上面的default队列
# 配置某个函数对应执行queue中值为route_key的数据
CELERY_ROUTES = {
"project.tasks.get_haha": {
"queue": "process",
"routing_key": "web",
}
}
3、个人配置celery.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from celery import Celery,platforms
import sys
reload(sys)
sys.setdefaultencoding('utf8')
app = Celery("project", include=['project.tasks'])
app.config_from_object('project.config')
platforms.C_FORCE_ROOT = True
if __name__ == '__main__':
app.start()