Удаление заданий из сельдерея по имени (с подстановочным знаком?) - PullRequest
0 голосов
/ 04 января 2019

Есть ли способ удалить определенный набор задач из сельдерея?Может быть, использовать подстановочный знак?Что-то вроде:

app.control.delete("foobar-only-*")

Я знаю, что могу удалить все задачи с помощью

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

, который приходит от здесь , но это не очень полезно, поскольку это не таккажется, что я могу использовать этот код, чтобы настроить его и делать то, что я хочу.

1 Ответ

0 голосов
/ 04 января 2019

Отвечая на мой вопрос.Это выдержка из кода, с помощью которого я достиг своей цели:

def stop_crawler(crawler_name):
    crawler = Crawler.objects.get(name=crawler_name)
    if crawler is None:
        logger.error(f"Can't find a crawler named {crawler_name}")
        return

    i = app.control.inspect()

    queue_name = f"collect_urls_{crawler_name}"

    # Iterate over all workers, and the queues of each worker, and stop workers
    # from consuming from the queue that belongs to the crawler we're stopping
    for worker_name, worker_queues in i.active_queues().items():
        for queue in worker_queues:
            if queue["name"] == queue_name:
                app.control.cancel_consumer(queue_name, reply=True)

    # Iterate over the different types of tasks and stop the ones that belong
    # to the crawler we're stopping
    for queue in [i.active, i.scheduled, i.reserved]:
        for worker_name, worker_tasks in queue().items():
            for task in worker_tasks:
                args = ast.literal_eval(task["args"])
                if "collect_urls" in task["name"] and args[0] == crawler_name:
                    app.control.revoke(task["id"], terminate=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...