celery常用配置总结 【celery配置worker数和单个worker最多执行任务数】

来源:互联网 发布:苏州软件项目经理招聘 编辑:程序博客网 时间:2024/06/05 07:50

我用的setting配置:

#!/usr/bin/env pythonimport randomfrom kombu import serializationfrom kombu import Exchange, Queueimport ansibleServiceserialization.registry._decoders.pop("application/x-python-serialize")broker_url = ansibleService.getConfig('/etc/ansible/rabbitmq.cfg', 'rabbit', 'broker_url')celeryMq = ansibleService.getConfig('/etc/ansible/rabbitmq.cfg', 'celerymq', 'celerymq')SECRET_KEY='top-secrity'CELERY_BROKER_URL = broker_urlCELERY_RESULT_BACKEND = broker_urlCELERY_TASK_RESULT_EXPIRES = 1200CELERYD_PREFETCH_MULTIPLIER = 4CELERYD_CONCURRENCY = 1CELERYD_MAX_TASKS_PER_CHILD = 1CELERY_TIMEZONE = 'CST'CELERY_TASK_SERIALIZER='json'CELERY_ACCEPT_CONTENT=['json']CELERY_RESULT_SERIALIZER='json'CELERY_QUEUES = (    Queue(celeryMq, Exchange(celeryMq), routing_key=celeryMq),)CELERY_IGNORE_RESULT = TrueCELERY_SEND_EVENTS = FalseCELERY_EVENT_QUEUE_EXPIRES = 60

rmq作为消息队列。

并发worker数25

每个worker最多执行一个任务就销毁。(执行完全任务,进程销毁重建,释放内存)


# -*- coding:utf-8 -*-                                                                                                                                                  from datetime import timedeltafrom settings import REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, REDIS_DB_NUM# 某个程序中出现的队列,在broker中不存在,则立刻创建它CELERY_CREATE_MISSING_QUEUES = TrueCELERY_IMPORTS = ("async_task.tasks", "async_task.notify")# 使用redis 作为任务队列BROKER_URL = 'redis://:' + REDIS_PASSWORD + '@' + REDIS_HOST + ':' + str(REDIS_PORT) + '/' + str(REDIS_DB_NUM)#CELERY_RESULT_BACKEND = 'redis://:' + REDIS_PASSWORD + '@' + REDIS_HOST + ':' + str(REDIS_PORT) + '/10'CELERYD_CONCURRENCY = 20  # 并发worker数CELERY_TIMEZONE = 'Asia/Shanghai'CELERYD_FORCE_EXECV = True    # 非常重要,有些情况下可以防止死锁CELERYD_PREFETCH_MULTIPLIER = 1CELERYD_MAX_TASKS_PER_CHILD = 100    # 每个worker最多执行万100个任务就会被销毁,可防止内存泄露# CELERYD_TASK_TIME_LIMIT = 60    # 单个任务的运行时间不超过此值,否则会被SIGKILL 信号杀死 # BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 90}# 任务发出后,经过一段时间还未收到acknowledge , 就将任务重新交给其他worker执行CELERY_DISABLE_RATE_LIMITS = True   # 定时任务CELERYBEAT_SCHEDULE = {    'msg_notify': {        'task': 'async_task.notify.msg_notify',        'schedule': timedelta(seconds=10),        #'args': (redis_db),        'options' : {'queue':'my_period_task'}    },    'report_result': {        'task': 'async_task.tasks.report_result',        'schedule': timedelta(seconds=10),      #'args': (redis_db),        'options' : {'queue':'my_period_task'}    },    #'report_retry': {    #    'task': 'async_task.tasks.report_retry',    #    'schedule': timedelta(seconds=60),    #    'options' : {'queue':'my_period_task'}    #},}################################################# 启动worker的命令# *** 定时器 ***# nohup celery beat -s /var/log/boas/celerybeat-schedule  --logfile=/var/log/boas/celerybeat.log  -l info &# *** worker ***# nohup celery worker -f /var/log/boas/boas_celery.log -l INFO &################################################








以上是我在工作的一些总结。

同时其它需要交代的是

CELERYD_TASK_TIME_LIMIT

BROKER_TRANSPORT_OPTIONS

使用需要十分谨慎, 如果CELERYD_TASK_TIME_LIMIT设置的过小,会导致task还没有执行完,worker就被杀死;BROKER_TRANSPORT_OPTIONS 设置的过小,task有可能被多次反复执行。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 澳洲医保卡丢了怎么办 澳洲爱他美上火怎么办 学信网学籍在籍没交学费怎么办 宝宝从床上摔下来怎么办 狗没打针被咬了怎么办 狗咬了没破皮没出血怎么办 被宠物狗咬了出血了怎么办 让狗咬了下红了怎么办 狗牙齿碰到红了怎么办 加拿大学生签背景调查了怎么办 gpa不到3该怎么办英国 内地学生赴港签证怎么办 学生去日本旅游签证怎么办 澳洲未婚妻签需要单身证明怎么办 高院收到申诉材料怎么办? 辞职出国留学后社保怎么办 高三数学40来分怎么办 论文查重表格内容重复怎么办 榕树叶子掉光了怎么办 2017江苏高考2c怎么办 高考刚过三本线怎么办 江苏高考选修有d怎么办 西安地铁卡丢了怎么办 酒后头痛怎么办快速缓解疼痛 孕妇感冒头痛怎么办快速缓解疼痛 投稿后发现文章有错误怎么办 如有一方不同意离婚怎么办 孩子上课时注意力不集中怎么办 幼儿上课时注意力不集中怎么办 孩子读初中不爱读书怎么办 老师需要刺激孩子家长怎么办 错觉视界第11关怎么办 爱逃学的学生老师怎么办 论文投稿发现有错误怎么办 孩子上初中数学物理不好怎么办 火山小视频误踢怎么办 铁棍山药弄到手很痒怎么办 山药皮过敏很痒怎么办 貔貅被家人摸了怎么办? 摸了山药很痒怎么办 山药搞得皮肤痒怎么办