2016-12-12 54 views
5
Dinamik görevin başka bir grubun sonunda Kereviz ile periyodik görev planlamak istediğiniz

sonunda Programı periyodik görev.Kereviz - başka bir görev

Ben Kereviz ile (statik) periyodik görevler oluşturmak için biliyorum:

CELERYBEAT_SCHEDULE = { 
     'poll_actions': { 
      'task': 'tasks.poll_actions', 
      'schedule': timedelta(seconds=5) 
     } 
} 

Ama benim görevler dinamik periyodik istihdam yaratmak istiyoruz (ve belki bazı koşul olduğunda bu periyodik işleri durdurmak için bir yol var elde (bütün görevler yapılır)

şey gibi.

@celery.task 
def run(ids): 
    group(prepare.s(id) for id in ids) | execute.s(ids) | poll.s(ids, schedule=timedelta(seconds=5)) 

@celery.task 
def prepare(id): 
    ... 

@celery.task 
def execute(id): 
    ... 

@celery.task 
def poll(ids): 
    # This task has to be schedulable on demand 
    ... 

cevap

3

buna basit çözümü/kaldır yendi zamanlayıcı ENTR eklemek mümkün olmasını gerektirir sineklerin üzerinde.

How to dynamically add/remove periodic tasks to Celery (celerybeat)

... Bu sorunun cevaplanması itibariyle bu mümkün değildi. Bunun Burada iki kavram conflating olan

... çünkü arada kullanılabilir hale gelmiştir şüpheliyim. "Olay Tabanlı İşin" kavramı ve (gerçekten olay bir programa olur sadece ilk davadır ) "Toplu Takvimi Driven İşin" fikri. Gerçekten burada ne yaptığını düşünün Eğer kenar vakaların oldukça karmaşık bir dizi olduğunu göreceksiniz. Mesajlar, farklı mesajlardan oluşturulan gruplar çelişen girişler oluşturmaya başladığında ne olacak? Daha önce planlanmış bir kruft dağının altında kendinizi bulduğunuzda ne yaparsınız?

gerçekten özyinelemeli ağaçları ilerletmek isteyen mesajlaşma sistemleri ile çalışıyor. Bir şey yapan ve daha fazla şey yapmak için daha fazla mesaj üreten işlerin iğleri. Bunların yanısıra döngüleri (amaçlanan veya başka türlü), temel hallerine ulaşır ve sona erer.

gerçekte mesajlaşma sistemi ve asenkron çalışma çerçevesinin sınırlamalar dahilinde sorununuzu yeniden kodlamayı ile yalan ulaşmak için çalışıyoruz ne olursa olsun cevabını.