celery 延时触发任务, 删除延时任务

场景:给用户发送的系统消息,默认七天后自动已读,当用户自己点击查看消息后则不需用七天后再处理任务

先创建一个 celery app

# service.py

from celery import Celery
import time
app = Celery('service', backend='redis://0.0.0.0:6379/0',
             broker='redis://0.0.0.0:6379/0')  # 配置好celery的backend和broker


@app.task  # 普通函数装饰为 celery task
def add(x, y):
    return x + y


if __name__ == "__main__":
    from celery.bin import worker
    # 通过 worker 启动 celery 
    worker = worker.worker(app=app)
    options = {
        'loglevel': 'INFO',
        'traceback': True
    }
    worker.run(**options)

向任务队列提交任务

add.apply_async((3, 3), countdown=2, expires=1)

说明: countdown 表示的是多少秒后执行任务 expires 表示的是多少秒后任务过期

以前一直不明白 expires 的作用,后来才发现,当任务队列执行大量任务的时候, 带 expires 参数的任务就处于等待状态,可能当前面任务执行完的时候,此任务就不是必须执行的了

移除任务

app.control.revoke("task_id")

task_id 就是任务创建时返回的 AsyncResult 对象的 id

from celery.result import  AsyncResult