Celery实现异步任务和定时任务

本文介绍了Celery作为分布式队列管理工具在实现异步任务和定时任务中的应用。内容包括Celery的基本概念、结构、安装与使用,以及在Django中整合Celery的方法。在实际操作中,可能会遇到如Redis连接问题、任务状态跟踪、多任务结构和定时任务调度等挑战,文中给出了相应的解决方案。此外,还探讨了在Windows环境下运行Celery的注意事项和如何避免任务并发执行的问题。
摘要由CSDN通过智能技术生成

概念

Celery:是一个分布式队列的管理工具。

提供了简便的接口管理任务队列

结构

生产者 user: 发布任务
任务队列 broker: 存储任务,常见的有redis,rabbitMQ
职程(工作者) worker: 处理任务
结果 backend 存储结果

使用

  1. 首先需要一个redis服务器用来做消息队列和存储任务的结果,这个redis可以在本地,也可以在远程,他可能是一个redis服务,也可能是redis集群。
    sudo apt-get install redis
    vim /etc/redis/redis.conf
    将保护模式关闭(protected mode: no), 注释掉(bind)。
    cd /usr/bin/
    ./redis-server /etc/redis/redis.conf

  2. 需要一个被发布的任务
    pip install celery 安装celery,注意版本可能与环境不切合,或者版本就是异常的,pip install --upgrade https://github.com/celery/celery/tarball/master,不是自己代码问题就把版本调低
    pip install django-redis redis支持

from celery import Celery
import time
app = Celery('tasks',broker='redis://ip:6379/0',backend='redis://ip:6379/1')

@app.task
def add(x,y):
	time.sleep(10)
	return x+y
  1. 需要一个任务的触发器,调用这个任务
# tasks.py
from somewhere import add
ret = add.delay(1,2)
# ret 就是一个id,可以凭借这个id去获取状态,如果是successful就可以获取结果信息。
  1. 启动Celery
    folder是文件夹的名字,tasks.py是文件夹下的触发器。
    celery worker -A folder.tasks -l info

取异步请求的结果

# result.py 等执行完上个程序在执行这个
from celery.result import AsyncResult
from folder.tasks import app  # 创建的Celery实例拿过来
# 上面的程序得到的ret是AsyncResult对象,调用.id方式得到他的id。
ret = AsyncResult(id =ret.id,app=app)
print(ret.state)
if ret.successful():
	print(ret
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值