flask 中使用celery

目录结构如下:

init.py

from __future__ import absolute_import, unicode_literals

config.py

from datetime import timedelta

# celery配置

# 消息代理
BROKER_URL = 'redis://IP:6379/0'
# 存储任务执行结果
CELERY_RESULT_BACKEND = 'redis://IP:6379/1'
# 任务的序列化方式
CELERY_TASK_SERIALIZER = 'pickle'
# 任务执行结果的序列化方式
CELERY_RESULT_SERIALIZER = 'pickle'
# 任务过期时间
CELERY_TASK_RESULT_EXPIRES = 100
# 接受内容类型
CELERY_ACCEPT_CONTENT = ['json', 'pickle']
# 超时再分配时间
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 100}
# 并发worker数量
CELERYD_CONCURRENCY = 4
# 防止死锁,应确保为True
CELERYD_FORCE_EXECV = True
# 禁用任务预取
CELERYD_PREFETCH_MULTIPLIER = 1
# 每个worker执行了多少任务就会死掉,避免内存泄露
CELERYD_MAX_TASKS_PER_CHILD = 100
# 时区设置,用于定时任务
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = False
# 任务导入,包括异步任务和定时任务
CELERY_IMPORTS = (
    'celery_tasks.tasks',
)
# 计划任务
CELERYBEAT_SCHEDULE = {
    'test_reminders': {
        # task就是需要执行计划任务的函数
        'task': 'run_server.test',
        # 配置计划任务的执行时间,这里是每60秒执行一次
        'schedule': timedelta(seconds=60),
        # 传入给计划任务函数的参数
        'args': None
    },
}


celery_init.py

from __future__ import absolute_import , unicode_literals
from celery import Celery
import time

celery_app = Celery('tasks')
celery_app.config_from_object('taskCenter.config')

task.py

from .celery_init import celery_app
import time


@celery_app.task(name='tasks.add')
def add(a, b):
    print('开始')
    time.sleep(100)
    print('end')
    return {'result': a+b}

celery启动命令
Windows:

celery -A application.taskCenter.celery_init:celery_app worker -P eventlet -l info

Linux下不需要eventlet

celery -A application.taskCenter.celery_init:celery_app worker -l info
posted @ 2022-06-10 09:34  啦啦la  阅读(608)  评论(0编辑  收藏  举报