美文网首页
Celery+Redis实现异步任务(1)

Celery+Redis实现异步任务(1)

作者: 木叶苍蓝 | 来源:发表于2020-01-03 15:51 被阅读0次

celery是4.0及以上版本请确保pythonredis库版本在2.10.4及以上,否则会出现redis连接timeout的错误

相关:

Celery-详解
Celery+Redis实现异步任务(1)
Celery+Redis实现异步任务(2)
Celery+Redis实现异步任务(3)

安装
    pip insatll celery # 安装celery
    pip install celery[redis] # 安装链接redis的驱动
    sudo apt-get install redis-server # 安装redis服务

安装完成后redis服务会自动启动,检查redis进程: ps -ef | grep redis
通过启动命令检查redis服务启动状态: sudo /etc/init.d/redis-server status
通过客户端访问redisredis-cli

使用Celery
  1. 初始化一个app实例
    创建 task.py
import time
from celery import Celery

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

@app.task
def hello(name):
      print("hello world >>> {}".format(name))
      return "hello world >>>{}".format(name)

创建hello.py

from task import hello

if __name__ == "__main__":
      hello.delay('xxx')

执行命令启动 Celery

celery worker -A task -l INFO

生成任务

 python hello.py
代码说明:

初始化app实例

app = Celery(celery_name, broker, backend)

broker:消息中间件

broker = 'redis://loaclhost:6379/1'

backend:结果的存储

backend = 'redis://loaclhost:6379/2'

启动broker

celery worker -A task -l INFO
# -A 参数表示 Celery APP的名称
# -l 参数表示日志级别
# 追加启动参数 -c 10,设定并发限制数为 10

注意:

  1. 调用的时候用delay获取apply_async方式调用,而不是直接调用。delayapply_async的快捷方式,二者作用相同,只是apply_async可以进行更多的任务属性设置,比如callbacks/errbacks正常回调与错误回调,执行超时,重试,重试时间等。
  2. 两个不同的worker监听共享缓冲区的同一个队列会出错,得指定队列。
    3.可以通过redis-cli客户端查看 backend存储的结果,结果储存的失效时间默认24小时。

相关文章

网友评论

      本文标题:Celery+Redis实现异步任务(1)

      本文链接:https://www.haomeiwen.com/subject/sfbzoctx.html