簡體   English   中英

使用Flask動態安排Celery Beat任務

[英]Dynamically Schedule Celery Beat task with Flask

我希望能夠讓我的應用程序的用戶啟動/停止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

celery -A celery_worker.celery beat -s ~/Documents/cesco-automation/power/celerybeat-schedule

而且效果很好! 但我需要更多地控制時間表。

同樣在我的app shell上,我能夠做到這一點。

>>>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似乎不夠銳利。

此功能將在Celery ver.4.0中提供。 動態任務調度目前僅在開發版本中受支持: http//docs.celeryproject.org/en/master/userguide/periodic-tasks.html#beat-entries

即使我們為我們的應用程序放棄了flask / python。 通過使用名為Kala的調度程序解決了此問題。 這是一個簡單的JSON over HTTP API,由Chronus提供 ,與Kala相同,但Airbnb提供了更強大,更具可擴展性的解決方案。 它完全與語言無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM