我希望能让我的应用程序用户使用Celery beat启动/停止周期性的类似于crontab的任务。目前,我正在运行Celery。
venv/bin/celery worker -A celery_worker.celery --loglevel=info
我用这个简单的例子运行了Celery Beat:
@celery.task
def add(x, y):
return x + y
在我的配置文件中:
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'app.email.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
}
CELERY_TIMEZONE = 'UTC'
然后我使用以下命令运行Celery定时任务工作者:
celery -A celery_worker.celery beat -s ~/Documents/cesco-automation/power/celerybeat-schedule
它完美地运行了!但我需要更多地控制时间表。
在我的应用程序壳上,我也能够做到这一点。
>>>add.apply_async([80,800],countdown=30)
>>> from datetime import datetime, timedelta
>>> tomorrow = datetime.now() + timedelta(days=1)
>>> add.apply_async(args=[10, 10], eta=tomorrow)
这很好,但我正在开发一个家庭自动化应用程序,所以我还需要停止任务。我该怎么做??
我还发现了这个链接,提到了django自定义调度程序类。这正是我所需要的。在Celery文档中,它提到了-S标志,但我不知道如何将类正确地添加到我的Flask应用程序中。我该如何在Flask中使用它?
我真的需要Celery Beat吗?除了crontab之外还有其他选择吗?Crontab似乎不够准确。