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でこれをテストしようとしています。これが稼働したら、実稼働環境でデモンストレーションします。ありがとう。