Python编程:Celery执行异步任务和定时任务
  TEZNKK3IfmPf 2023年11月15日 36 0

1、简介

1、异步任务 耗时操作异步执行

2、定时任务 类似crontab

Python编程:Celery执行异步任务和定时任务_定时任务

2、安装

1、安装pyhton版本管理工具

pyenv pyenv-virtualenv

2、安装虚拟环境管理工具

virtualenv virtualenvwrapper

3、安装模块

pip install celery[redis]

4、安装消息中间件

RabbitMQ / Redis

3、单文件使用

1、编写函数celery_app.py

from celery import Celery
import time

broker = "redis://localhost:6379/1"
backend = "redis://localhost:6379/2"
app = Celery("my_task", broker=broker, backend=backend)


@app.task(name="task")
def add(a, b):
    print("coming...")
    time.sleep(5)
    return a + b


if __name__ == '__main__':
    result = add(1, 2)
    print(result)

2、启动worker

$ celery worker -A celery_app -l INFO

参数:

A: app文件名称

l:日志级别

3、启动任务

> from celery_app import add
> result = add.delay(3, 4)
> result.ready()
> result.get()

4、工程化使用

目录结构

├── app.py
└── celery_app
    ├── __init__.py
    ├── celeryconfig.py
    ├── task1.py
    └── task2.py

实例化Celery __init__.py

# -*- coding: utf-8 -*-

from celery import Celery

app = Celery(__file__)

# 加载配置模块
app.config_from_object("celery_app.celeryconfig")

配置文件 celeryconfig.py

# -*- encoding:utf-8 -*-

# celery配置文件

BROKER_URL = 'redis://localhost:6379/1'

CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'

# 设置时区,默认UTC
CELERY_TIMEZONE = 'Asia/Shanghai'

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = True

# 导入指定的任务模块
CELERY_IMPORTS = (
    "celery_app.task1",
    "celery_app.task2"
)

任务文件 task1.py

# -*- coding: utf-8 -*-

import time
from celery_app import app


@app.task
def add(x, y):
    time.sleep(3)
    return x + y

任务文件 task2.py

# -*- coding: utf-8 -*-

import time
from celery_app import app


@app.task
def multiply(x, y):
    time.sleep(5)
    return x * y

启动worker

$ celery worker -A celery_app -l INFO

5、定时任务

可以直接配置到配置文件中 celeryconfig.py

from datetime import timedelta

from celery.schedules import crontab

# 设置定时任务
CELERYBEAT_SCHEDULE = {
    "task1": {
        "task": "celery_app.task1.add",
        "schedule": timedelta(seconds=10),
        "args": (2, 8)
    },
    "task2": {
        "task": "celery_app.task1.add",
        "schedule": crontab(hour=14, minute=59),
        "args": (2, 8)
    }
}

启动定时任务

$ celery beat -A celery_app -l INFO

celery 4.1.0 时区bug -> 4.0.2

一条命令启动异步任务和定时任务

$ celery -B -A celery_app worker -l INFO
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   27   0   0 redis用户
  TEZNKK3IfmPf   2024年05月31日   29   0   0 dataredis
  TEZNKK3IfmPf   2024年05月31日   27   0   0 awkredis
  TEZNKK3IfmPf   2024年04月19日   39   0   0 javarediskey
TEZNKK3IfmPf