2015-06-21 15 views
6

Uygulamamın kullanıcısını Celery beat ile periyodik crontab stili görevlerini başlatmasına/durdurmasına izin vermek istiyorum.Dinamik Program Çizelgesi Flask ile Yığın Yendi görevi

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

sonra Kereviz yendi işçisi ile çalıştırın: benim yapılandırma dosyasında üzerinde

@celery.task 
def add(x, y): 
    return x + y 

: Şu anda

venv/bin/celery worker -A celery_worker.celery --loglevel=info 
Ben Kereviz bu basit örnekle çalışan çırpın var

ile kereviz çalıştırmak

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

Ve mükemmel çalışıyor! Fakat program üzerinde daha fazla kontrol sahibi olmalıyım.

Ayrıca uygulama kabuklarımda bunu yapabilirim.

>>>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) 

Bu harika, ama bir ev otomasyon uygulaması geliştiriyorum, bu yüzden de görevleri durdurmam gerekiyor. Bunu nasıl yaparım??

Ayrıca bir django özel zamanlayıcı sınıfları hakkında bahseden bu link bulduk. Tam olarak ihtiyacım olan şey bu. Celery docs'da, -S işaretinden bahseder, ancak sınıfı Flask uygulamasına doğru şekilde nasıl ekleyeceğimi bilmiyorum. Flask ile nasıl kullanabilirim?

Gerçekten Celery Beat'a ihtiyacım var mı? Crontab'ın başka bir seçeneği var mı? Crontab yeterince keskin görünmüyor.

+0

Varsayılan kereviz zamanlayıcısı büyük ölçüde berbat. Saat dilimleriyle uğraşmaya bile başlamadım. Ben bir veritabanı scheduler kullanmak istiyorum, django http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes – reptilicus

+0

için aynı bakabilirim soru üzerine, ama nasıl çalışacağını bilmiyorum. Django zamanlayıcıyı Flask uygulamasında kullanabilir miyim? Nasıl? – CESCO

+0

@CESCO, Merhaba, flask uygulamasında django scheduler kullanmayı denediniz mi? Eğer evet ise, lütfen –

cevap

4

Bu işlevsellik, Kereviz ver.4.0 adresinde bulunacaktır.Dinamik görev zamanlaması yalnızca şu anda geliştirme sürümünde desteklenmektedir: http://docs.celeryproject.org/en/master/userguide/periodic-tasks.html#beat-entries

+0

Celery 4.0.0'ın 2016-11-04'te piyasaya sürüldüğü anlaşılıyor: http://docs.celeryproject.org/en/latest/changelog.html#version-4-0-0. Bu, dinamik crontab periyodik çizelgelerinin mevcut olduğu anlamına gelir. –

+0

Dinamik crontabs'in nasıl kullanılacağı konusunda bir örnek var mı? – Deusdeorum

+1

Bu sadece beat başlamadan önce çalışır. Programa eklenen herhangi bir şey, beat yeniden başlatılıncaya kadar alınmaz.Periyodik görevleri dinamik olarak eklemenin bir yolu yoktur. – Dineshs91

0

Uygulamamız için flask/python'u terk etmemize rağmen. Bu sorun, Kala adlı bir zamanlayıcı kullanılarak çözüldü. Hangisi, Chronus tarafından hazırlanan HTTP API'sı üzerinden basit bir JSON'dur, bu da Kala ile aynıdır, ancak Airbnb tarafından daha sağlam ve ölçeklenebilir bir çözümdür. Tamamen bir dil agnostik.