如何定期清除 celery rabbitmq 中的队列?

How do I periodically purge a queue in celery rabbitmq?

我如何定期清除 celery 队列,比如在队列中有任何未完成的任务后每分钟清除一次,然后我需要在一分钟后清除所有这些任务。

我该怎么做?

如果需要超时任务,使用Time to Live;否则如果有旧任务清除队列可能会导致新任务被丢弃。

你可以设置

rabbitmqctl set_policy TTL ".*" '{"message-ttl":60000}' --apply-to queues

您的队列现在将丢弃早于 1 分钟的任务。

也就是说,在 RMQ 中有一个 purge 命令,您可以只调用一个计时器。 https://rabbitmq.github.io/rabbitmq-java-client/api/current/com/rabbitmq/client/AMQP.Queue.html

您可以设置time_limit任务在一定时间后终止。 Celery Time Limits

@app.task(time_limit=60)
def long_running_task():
    ...