2013-07-17 9 views
16

Mam 2 typy zadań: zadania asynchroniczne i zadania harmonogramu. Oto moja struktura:Struktura zadań selera

proj 
    | 
    -- tasks 
     | 
     -- __init__.py 
     | 
     -- celeryapp.py  => celery instance defined in this file. 
     | 
     -- celeryconfig.py 
     | 
     -- async 
     | | 
     | -- __init__.py 
     | | 
     | -- task1.py => from proj.tasks.celeryapp import celery 
     | | 
     | -- task2.py => from proj.tasks.celeryapp import celery 
     | 
     -- schedule 
      | 
      -- __init__.py 
      | 
      -- task1.py => from proj.tasks.celeryapp import celery 
      | 
      -- task2.py => from proj.tasks.celeryapp import celery 

Ale kiedy prowadzę selera, jak poniżej, to nie działa. Nie może przyjąć zadania od harmonogramu rytmu selera.

$ celery worker --app=tasks -Q my_queue,default_queue 

Czy istnieje dobra praktyka w zakresie organizacji wielu plików zadań?

+0

Czy próbowałeś dodać '-B' do polecenia? Powinien wykonać 'celerybeat' – geekazoid

+0

BTW, czy jest to projekt' django'? – geekazoid

+1

Pytanie o "jak uporządkować zadania selera" jest nieistotne/przedwczesne, chyba że wiesz *, że układ pliku jest przyczyną niedziałających rzeczy. Proszę również podać więcej szczegółów na temat tego, co "nie działa" i "nie można zaakceptować zadania z celerybeat". Innymi słowy, czego się spodziewać, a co się stanie? Konkretnie. Udostępnij wynik błędu. –

Odpowiedz

3

zadania Seler może być asynchroniczny, synchronizacja lub zaplanowane zależy od jego wezwaniem

task.delay(arg1,arg2)  #will be async 
task.delay(arg1,arg2).get() #will be sync 
task.delay(arg1,arg2).get() #will be sync 
task.apply_async(args = [arg1,arg2], {'countdown' : some_seconds}) #async with delay 

Istnieje wiele wywołań w zależności od potrzeb
Jednak trzeba zacząć seler z -b włączyć seler planującego

$ celery worker --app=tasks -B -Q my_queue,default_queue 

więc sposób można podjąć, aby zorganizować swoje zadania jest czymś osobistym i deppends na złożoność projektu, ale myślę, że organizują je swoim rodzaju synchronicznie wag nie byłaby najlepszą opcją.
Mam googleed ten temat i nie znalazłem żadnego przewodnika lub porady, ale przeczytałem kilka przypadków, które organizują swoje zadanie według ich funkcjonalności.
Postępuję zgodnie z tą radą, ponieważ nie jest to wzorzec w moich projektach. Oto jeden z przykładów, jak to zrobiłem

your_app 
    | 
    -- reports 
     | 
     -- __init__.py 
     -- foo_report.py 
     -- bar_report.py 
     -- tasks 
      | 
      -- __init__.py 
      -- report_task.py 
    -- maintenance 
     | 
     -- __init__.py 
     -- tasks 
      | 
      -- __init__.py 
      -- delete_old_stuff_task.py 
    -- twitter 
     | 
     -- __init__.py 
     -- tasks 
      | 
      -- __init__.py 
      -- batch_timeline.py     
6

podstawie selera documentation można zaimportować strukturę zadań selera takiego:

Na przykład jeśli masz (wyobrazić) drzewo katalogów tak:

| 
|-- foo 
| |-- __init__.py 
| |-- tasks.py 
| 
|-- bar 
    |-- __init__.py 
    |-- tasks.py 

Następnie wywołanie app.autodiscover_tasks(['foo', bar']) spowoduje, że moduły foo.tasks i bar.tasks zostaną zaimportowane.