2016-05-16 25 views
0

celeryのトラブルシューティングには、Djangoアプリでredisを実行する必要があります。このアプリでは、ユーザーが写真をアップロードして、アップロード後にユーザーの投票と時間に応じてすべての写真を定期的にランク付けするバックグラウンドプロセスを実行しようとしています(基本的なレッドライクのランキングアルゴリズムのように考える)。Djangoアプリのセロリと赤ちゃんのトラブルシューティング

私は含んで、私のプロジェクトフォルダ(settings.pyと同じフォルダ)でcelery.pyを持っている:

上記のファイルで言及
from __future__ import absolute_import 
import os 
from celery import Celery 
from django.conf import settings 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') 

app = Celery('myapp', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0',include=['myfolder.myapp.tasks']) 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 

app.conf.update(
    CELERY_TASK_RESULT_EXPIRES=3600, 
) 

if __name__ == '__main__': 
    app.start() 

tasks.pyは、myappフォルダ内に位置し、含まれています

import os 
from myproject import celery_app1 
import time 
from myapp.models import Photo 

@celery_app1.task(name='tasks.rank_all_photos') 
def rank_all_photos(): 
    for photo in Photo.objects.all(): 
     photo.set_rank() 
     print "ranked" 
from __future__ import absolute_import 
from .celery import app as celery_app1 
このフォルダには、 __init__.pyが含まれています。

import djcelery 
djcelery.setup_loader() 

BROKER_URL = 'redis://localhost:6379/0' 

CELERY_IMPORTS = ('myapp.tasks',) 

CELERY_ALWAYS_EAGER = False 

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' 

CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 
CELERY_IGNORE_RESULT=True 

from datetime import timedelta 

CELERYBEAT_SCHEDULE = { 
    'tasks.rank_all_photos': { 
     'task': 'tasks.rank_all_photos', 
     'schedule': timedelta(seconds=10), 
    }, 
} 

CELERY_TIMEZONE = 'UTC' 

'djcelery'こともINSTALLED_APPSに含まれている次のようsettings.pyから

最後に、関連する設定です。私には、上記のすべてが正しいと思われます。私はその出力を参照してください

---- **** ----- 
--- * *** * -- Linux-3.16.0-30-generic-x86_64-with-Ubuntu-14.04-trusty 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   myapp:0x7f0a15acb310 
- ** ---------- .> transport: redis://localhost:6379/0 
- ** ---------- .> results:  redis://localhost:6379/0 
- *** --- * --- .> concurrency: 2 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . tasks.rank_all_photos 

[2016-05-17 02:19:19,733: INFO/MainProcess] Connected to redis://localhost:6379/0 
[2016-05-17 02:19:19,745: INFO/MainProcess] mingle: searching for neighbors 
[2016-05-17 02:19:20,750: INFO/MainProcess] mingle: all alone 
/home/hassan/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/fixups/django.py:265: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 

[2016-05-17 02:19:20,761: WARNING/MainProcess] /home/hassan/.virtualenvs/myenv/local/lib/python2.7/site-packages/celery/fixups/django.py:265: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments! 
    warnings.warn('Using settings.DEBUG leads to a memory leak, never ' 

[2016-05-17 02:19:20,761: WARNING/MainProcess] [email protected] ready. 

、まだ私はtasks.pyが処理されたという証拠が表示されていない:私はcelery worker -A myproject --loglevel=INFOを実行すると、私は出力を参照してください。出力は出力されず、ランク付けも行われません。

私は初心者ですので、ここでは何か根本的な欠点があります。あなたは一見を持って、私のためにこれをトラブルシューティングできますか?私は現在、ローカルでfgでこれをテストしようとしています。これが稼働したら、実稼働環境でデモンストレーションします。ありがとう。

答えて

0

セロリビートも実行する必要があります。

celery beat -A myproject --loglevel=INFO 
関連する問題