Python 之使用 celery 实现消息队列,异步函数

关于celery 的实现消息队列,以及异步函数的使用有很多用途,比较常见的一个用途就是前端向后端发起一个请求,后端完成这个请求需要较长的时间,可以先向前端返回结果,然后将这个实现的过程存储,在后端慢慢实现。

那么这个过程,就可以使用 celery 来实现。

技术框架:
在这里用到的 Python 的后端框架是 Django。

celery 可以使用的中间件有 Redis,rabbitmq 等,这里用的是 Redis。
所以这里的技术框架是 Django + Redis + celery。

版本库:
Django == 2.0.13
django-redis == 4.10.0
celery == 4.3.0

操作步骤:

1、创建 celery 相关文件

在这里,我将 celery 的配置函数以及任务函数都放置在 Django 系统根目录下一个名为 client 的文件夹下,其下包含两个文件:
celeryConfig.py ————celery 配置函数
tasks.py ————任务函数

配置函数 celeryConfig.py

from celery import Celery

broker = 'redis://127.0.0.1:6379'
backend = 'redis://127.0.0.1:6379/0'

app = Celery('my_task', broker = broker, backend = backend, include = ['client.tasks'])
app.conf.update(
    result_expires = 3600,
)

if __name__ == '__main__':
    app.start()

在这里我们使用的是 Redis 作为我们的中间件,所以 broker 和 backend 都是 redis 的地址,include 是任务函数的一个集合,放在 client 文件夹下的 tasks.py 里。

任务函数 tasks.py

from celery import Celery
from client.celeryConfig import app

@app.task(name='sendMsg') #这里不命名会报错
def sendMessage(*args):
	return OK

在任务函数里我的里面一定要给每个函数单独命名,不命名会报错。

2、调用 celery 异步函数

在我们创建的 Django 的 app 里的 views.py 里函数里使用如下:

from client.tasks import sendMessage
def test(request):
	sendMessage.delay(*args)	
	return HttpResponse(...)

这样,我们就实现了使用 celery 实现消息队列以及异步函数的功能

3、启动 celery

celery 需要单独启动,如果将 Django 的启动写在一个 shell 脚本里,那么可以把 celery 的启动命令也跟在后面。

启动命令如下:

sudo nohup celery -A client.celeryConfig worker  >> client/celery.log &

众志成城,武汉加油!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值