celery+redis的使用(异步任务、定时任务)

celery+redis的使用(异步任务、定时任务)

celery+redis的使用

celery理解安装celery+redis异步任务使用1.基础使用新建task.py文件在项目文件目录下执行python交互式编程在项目文件目录下创建worker消费任务

2.使用导入配置文件的方式新建python包文件目录celery_study新建配置文件celery_config.py新建task_add.py文件书写需要异步的逻辑终端启动我们的worker新建main.py文件并执行

定时任务修改celery_config.py1.分别启动worker和beat启动worker启动定时任务配置

2.同时启动worker和beat

celery理解

celery是典型的生产者+消费者的模式,生产者生产任务并加入队列中,消费者取出任务消费。多用于处理异步任务或者定时任务。

安装celery+redis

pip install -i https://pypi.douban.com/simple celery

pip install -i https://pypi.douban.com/simple redis

异步任务使用

1.基础使用

新建task.py文件

from celery import Celery

app = Celery('demo', backend='redis://localhost:6379/1', broker='redis://localhost:6379/2')

@app.task

def add(x, y):

return x + y

此时相当于注册了celery app

在项目文件目录下执行python交互式编程

>>> from task import add

>>> res = add.delay(3,5)

>>> res.ready()

False

>>> res.get()

此处相当于是生产者,生产任务并交给broker

使用add.delay(3,5)异步处理add函数,或者使用add.apply_async((3,5))res.ready()可以查看任务是否完成res.get()任务如果完成,可以获得任务返回结果;否则,一直阻塞,直到任务完成,然后返回结果

在项目文件目录下创建worker消费任务

celery -A task worker --loglevel=info

task 为注册celery app的py文件名字注意celery版本不同命令不同的问题 上面图片config中我们可以看到celery app名称以及broker和backend的设置 并且这里立马消费了我们开始扔进redis的任务,可以回到我们的交互式编程查看结果已经被返回回来 此时我们再扔进一个任务,可以看到结果可以马上返回

>>> res = add.delay(5,6)

>>> res.ready()

True

>>> res.get()

11

>>>

2.使用导入配置文件的方式

新建python包文件目录celery_study

在__init__.py文件中,我们注册celery app

from celery import Celery

app = Celery('demo')

# 通过celery实例获取配置

app.config_from_object('celery_study.celery_config')

新建配置文件celery_config.py

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

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

CELERY_TIMEZONE = 'Asia/Shanghai'

CELERY_IMPORTS = (

'celery_study.task_add'

)

新建task_add.py文件书写需要异步的逻辑

import time

from celery_study import app

@app.task

def add(x, y):

time.sleep(3)

return x + y

终端启动我们的worker

celery -A celery_study worker --loglevel=info

同样也可以看到celery正常启动

新建main.py文件并执行

from celery_study import task_add

task_add.add.delay(8, 4)

print('end...')

可以看到控制台输出了end... 在worker终端界面输出了

定时任务

修改celery_config.py

from datetime import timedelta

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {

# 每10s执行一次

'task1': {

'task': 'celery_study.task_add.add',

'schedule': timedelta(seconds=10),

'args': (2, 8)

},

# 每天15:00执行

'task2': {

'task': 'celery_study.task_add.add',

'schedule': crontab(hour=15, minute=0),

'args': (9, 9)

}

}

添加定时任务

1.分别启动worker和beat

启动worker

celery -A celery_study worker --loglevel=info

启动定时任务配置

celery -A celery_study beat --loglevel=info

2.同时启动worker和beat

celery -A celery_study worker --beat --loglevel=info

相关推荐

罂粟壳藏身中药材集散地,打着卖药的旗号卖“毒”
女教师(系列)
365娱乐

女教师(系列)

📅 10-19 👁️ 222
刘亦菲舞姿进化史:从青涩少女到优雅女神的蜕变!