我不知道如何删除花的任务相关数据。我需要清除我的 Flower 数据以进行调试,但我不知道该怎么做。
我的花和芹菜在 docker 上运行,即使我删除了 docker 及其相应的卷,我的花和芹菜历史数据中仍然有数据。
我的码头工人撰写配置:
celery:
build: ./web
command: su myuser -c "celery worker --app=project.celery:app --loglevel=info --logfile=log/celery-worker.log --concurrency=4"
volumes:
- ./web:/usr/src/app
env_file: .env
environment:
DEBUG: 'true'
links:
- postgres
- redis
flower:
build: ./web
expose:
- '5555'
ports:
- '5555'
command: su myuser -c "celery flower --app=project.celery:app --url_prefix=flower --persistent=True"
volumes:
- ./web:/usr/src/app
env_file: .env
environment:
DEBUG: 'true'
links:
- postgres
- redis
我的 DockerFile :
FROM python:3.5-stretch
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# pip install
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
# create unprivileged user (celery)
RUN adduser --disabled-password --gecos '' myuser
这不是Docker问题,而是与Flower相关的问题: 如果 flower 命令以选项 --persistent=True 启动,则来自 celery 的数据将存储在 python 搁架中(持久字典,https://docs.python.org/3/library/shelve.html(。此数据存储在我们启动花卉码头工人的文件夹根目录下的磁盘上。默认情况下,该文件名为"花"。
可以通过附加选项 --db=data/flower 来更改此文件的存储位置。
要删除历史记录,您只需删除包含此数据的文件即可。
我实现了一个新的 API 来删除任务
Events:
None delete_all_tasks()
示例:删除任务
import celery
import os
import datetime
broker = os.environ.get('CELERY_BROKER_URL')
app = celery.Celery('tasks', broker=broker)
flower = Flower(capp=app, options=flower_options)
flower.events.delete_all_tasks()
然后我们可以创建一个每小时运行的芹菜节拍调度程序,并删除任务
@app.task(queue='cleanup_tasks')
def clean_up_tasks():
from flower.app import Flower
flower_options = object()
flower_options.db = 'flower'
flower_options.persistent = True
flower_options.purge_offline_workers = 1
flower = Flower(capp=app, options=flower_options)
flower.events.delete_all_tasks()
@app.on_after_configure.connect
def add_periodic(**kwargs):
app.add_periodic_task(crontab(hour="*", minute=0), clean_up_tasks.s(), name='cleanup-tasks')
引用: https://github.com/mher/flower/issues/1189 https://github.com/mher/flower/pull/1188
希望 PR 尽快合并!
享受<3