2016-04-25 18 views
2

定期的なタスクを実行するために私のdjangoプロジェクトでセロリを使用しています。セロリのWebサイトから標準のチュートリアルに続いて、ここに私のプロジェクト構造は、settings.pyに プロジェクトセロリ周期タスクが起動しない

|_ settings.py 
|_ __init__.py 
|_ celery_app.py (instead of celery.py) 
|_ app 
    |_ tasks.py 

関連する部分である。このようになります -

CELERY_RESULT_BACKEND = "amqp" 
CELERY_IMPORTS = ["app.tasks"] 

CELERY_ALWAYS_EAGER = True  

CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend' 
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' 

CELERY_DB_REUSE_MAX = 1 

CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 
CELERY_TIMEZONE = 'America/New York' 

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

celery_app.pyはこのようになります -

from __future__ import absolute_import 
import os 
from celery import Celery 
from django.conf import settings 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') 
app = Celery('project') 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

tasks.pyはこのようです -

from __future__ import absolute_import 
from celery.utils.log import get_task_logger 
from celery import task 
from celery_app import app 

logger = get_task_logger(__name__) 

@app.task 
def test_task(): 
    for i in range(0, 4): 
     logger.debug("celery test task") 

私はセロリワーカーを実行すると、私は私の仕事が発見されて見ることができます -

$ python manage.py celery -A project worker --loglevel=DEBUG --app=celery_app:app 

-------------- [email protected] v3.1.19 (Cipater) 
---- **** ----- 
--- * *** * -- Darwin-15.4.0-x86_64-i386-64bit 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   project:0x10d5b9a10 
- ** ---------- .> transport: amqp://sgcelery1:**@localhost:5672/sgceleryhost 
- ** ---------- .> results:  djcelery.backends.database:DatabaseBackend 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . celery.backend_cleanup 
    . celery.chain 
    . celery.chord 
    . celery.chord_unlock 
    . celery.chunks 
    . celery.group 
    . celery.map 
    . celery.starmap 
    . app.tasks.test_task 

[2016-04-24 23:54:55,452: INFO/MainProcess] Connected to amqp://sgcelery1:**@127.0.0.1:5672/sgceleryhost 
[2016-04-24 23:54:55,471: INFO/MainProcess] mingle: searching for neighbors 
[2016-04-24 23:54:56,481: INFO/MainProcess] mingle: all alone 
[2016-04-24 23:54:56,497: WARNING/MainProcess] [email protected] ready. 

そして、私はビートを実行すると、それはsettings.pyからピックアップされているタスクを示しているが、それは決して実際に実行されます。

$ python manage.py celery -A project beat --app=celery_app:app --loglevel=DEBUG 

[2016-04-24 23:55:04,059: DEBUG/MainProcess] Current schedule: 
<ModelEntry: test_task tasks.test_task(*[], **{}) {4}> 

私はここで何が欠けていますか?

+0

と一緒にスケジュールされたタスクがピックアップされませんビート - 'のpython manage.pyセロリ-Aプロジェクトワーカー-B --loglevel = DEBUG --app =をcelery_app:app' – DancingJohn

答えて

0

CELERY_ALWAYS_EAGER = Falseを設定してみてください。

セッティングCELERY_ALWAYS_EAGER = Trueを設定すると、セレンが使用されていない状態でタスクが同期して実行されます。それをFalseに切り替えることにより、セロリが拾うようになり、定期的に実行されます。セラムがタスクを処理しないようにするには、開発モードでFalseスイッチを使用します。

チェックアウトドキュメントのワーカーを実行してもhere

+0

'CELERY_ALWAYS_EAGER = False'は何の違いもありませんでした。 – DancingJohn

+0

あなたのマシンでセロリが動いていますか?セルライトのビートは、定期的な作業を行うために実行する必要があります。 –

+0

元の質問の一番下に表示されている場合、私は両方を実行しています。労働者とビート。どちらもmanage.pyを使用します。それとも何か別のものがありますか? – DancingJohn

関連する問題