與瓶

2015-06-21 38 views
6

動態調度芹菜垮掉的任務,我希望能夠讓我的應用程序的用戶啓動/停止與芹菜節拍週期性的crontab風格的任務。現在我跑西芹與瓶

venv/bin/celery worker -A celery_worker.celery --loglevel=info 

我得到了芹菜擊敗這個簡單的例子運行:

CELERYBEAT_SCHEDULE = { 
    'add-every-30-seconds': { 
     'task': 'app.email.add', 
     'schedule': timedelta(seconds=30), 
     'args': (16, 16) 
    }, 
} 
CELERY_TIMEZONE = 'UTC' 

然後我跑了芹菜拍工作者:

@celery.task 
def add(x, y): 
    return x + y 
我的配置文件

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) 

這是偉大的,但我正在開發一個家庭自動化應用程序,所以我也需要停止任務。我該怎麼做呢??

我還發現這link提及有關Django的自定義調度類。這正是我需要的。在Celery docs它提到了-S標誌,但我不知道如何正確地將該類添加到我的Flask應用程序。我如何使用Flask?

我真的需要芹菜垮掉?其他選項還有其他選項嗎? Crontab似乎不夠尖銳。

+0

默認的芹菜調度程序有點勉強。甚至不要讓我開始用它來處理時區。我會用一個數據庫調度程序,可以看看一個Django的http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes – reptilicus

+0

我也提到相同的文檔在這個問題上,但不知道如何使它工作。我可以在我的Flask應用程序上使用Django調度程序嗎?怎麼樣? – CESCO

+0

@CESCO,嗨,你有沒有嘗試在燒瓶應用程序中使用django調度程序?如果是,請分享 –

回答

4

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

+0

看起來Celery 4.0.0已於2016-11-04發佈(穩定版):http://docs.celeryproject.org/en/latest/changelog.html#version-4-0-0。這意味着動態crontab週期性時間表可用。 –

+0

你有任何地方如何使用動態crontabs的例子嗎? – Deusdeorum

+1

僅在節拍開始前才起作用。除非節拍重新啓動,否則添加到時間表的任何內容都不會被拾取。仍然無法動態添加定期任務。 – Dineshs91

0

我們放棄瓶/蟒蛇爲我們的應用程序。使用名爲Kala的調度程序解決了此問題。這是一個簡單的JSON over HTTP API,由Chronus啓發,它與Kala相同,但是Airbnb提供了更強大,更可擴展的解決方案。它的語言完全不可知。