python之celery使用详解一

前言

前段时间需要使用rabbitmq做写缓存,一直使用pika+rabbitmq的组合,pika这个模块虽然可以很直观地操作rabbitmq,但是官方给的例子太简单,对其底层原理了解又不是很深,遇到很多坑,尤其是需要自己写连接池管理和channel池管理。虽然也有用过celery,一直也是celery+redis的组合,涉及很浅;目前打算深研一下celery+redis+rabbitmq的使用。

连接

本次使用Redis连接

  • 连接Redis

连接Redis

使用redis 存储对象,celery 会将信息存储到Redis

1. 首先创建 tasks.py:


from celery import Celery, platforms

platforms.C_FORCE_ROOT = True  #加上这一行

# 使用账户密码
# redis://username:passwd@ip:6390/db
# 只填密码
# redis://:password@127.0.0.1:6379/2

broker = 'redis://:123456@127.0.0.1:6379/1'
backend = ''
app = Celery('tasks', broker=broker)

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

用root用户连接,需加上platforms.C_FORCE_ROOT = True

python3.7 不兼容celery 版本4.0

2.运行 Celery 职程(Worker)服务

celery -A task文件 worker --loglevel=info
例如:
celery -A tasks worker --loglevel=info

3.

>>> from tasks import add
>>> add.delay(4, 4)

调用任务会返回一个 AsyncResult 的实例,用于检测任务的状态,等待任务完成获取返回值(如果任务执行失败,会抛出异常)。

  • ready()
    可以检测是否已经处理完毕:
  • r.ready() # 返回布尔值, 任务执行完成, 返回 True, 否则返回 False.
    r.wait() # 等待任务完成, 返回任务执行结果.
    r.get() # 获取任务执行结果
    r.result # 任务执行结果.
    r.state # PENDING, START, SUCCESS
    r.status # PENDING, START, SUCCESS

参考

posted @ 2021-01-31 00:41  鲁哒哒  阅读(260)  评论(2编辑  收藏  举报