首页 > 解决方案 > Celery - 使用 Python 脚本中的 Redis 清除特定队列

问题描述

我知道 Celery 的命令行选项:

celery -A my_app purge -Q queue_name

但我正在寻找一种queue_name使用 Celery 从我的 Python 应用程序中清除的方法,类似于:

def start_chunk(num_of_objs):
    # clear current queue before starting here
    RELEVANT CODE HERE TO PURGE queue_name
    for num in num_of_objcts:
         some_task.apply_async(kwargs={'num': num}, queue="queue_name")

请注意,我知道这一点:

from proj.celery import app
app.control.purge()

但据我了解,这会清除所有队列

标签: pythoncelery

解决方案


我承认,要做到这一点有点困难。但是,您应该首先查看如何解决此问题的提示是 bin/purge.py (这就是我所做的)。在分析了上述文件之后,我认为应该可以使用以下方法:

from celery.app.base import Celery
from yourproject import celery_app


def purge_queue(app: Celery, queue_name: str):
    with app.connection_for_write() as conn:
        conn.default_channel.queue_purge(queue_name)


purge_queue(celery_app, "celery")  # purge the "celery" queue

以上是更多/更少的内容celery -A yourproject.celery_app purge -Q celery


推荐阅读