3

OK、djangoでセロリ+ redisを取得するためにすべてを適切にインストールしました

私は得た

INSTALLED_APPS = (
    'djcelery',
    'kombu.transport.django',
)

これらは私の設定にあります

CELERY_REDIS_HOST = 'localhost'
CELERY_REDIS_PORT = 8889
CELERY_REDIS_DB = 0
CELERY_RESULT_BACKEND = 'redis'

BROKER_URL = "redis://localhost:8889/0"

REDIS_CONNECT_RETRY = True
CELERY_IGNORE_RESULT = True
CELERY_SEND_EVENTS = True
CELERY_TASK_RESULT_EXPIRES = 60
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler'

私はredisで作業しました

./redis-server

1秒ごとに端末に出力するので、実行することもできます

./manage.py celeryd -E -B --loglevel=INFO -n w1.d820

エラーなしで、タスクが追加され、正常に終了したことさえ確認できます

./manage celeryev

したがって、celeryev によってログに記録されたとしても、このコードは機能しません。

from celery.task import task
@task
def add(x, y):
    return x + y

res = add.apply_async(args=[1,5])
print res.wait()

結果を返さずにハングするだけです。実際にredisから取得しようとしていることがわかります。

./redis-cli
MONITOR

存在しないキーを取得しようとして多くの GET を取得するので、私の結論は、django がバックエンドに保存されていないということです。明らかな何かが欠けていると思いますが、これと戦っている時間が長すぎるため、それを見ることができません。ヘルプ

ところで、私は共有サーバー上にいるため、標準ポート 6379 を使用できません。

これらを使用して更新

celery==2.5.3
django-celery==2.5.5
django-celery-with-redis==2.5
4

4 に答える 4

6

持っimport djcelery; djcelery.setup_loader()ていますsettings.pyか?

次のコマンドを実行すると、接続しようとしている場所を見つけることができます。

 $ python manage.py celeryctl shell

 >>> celery.broker_connection().as_uri()

「setup_loader」は非常に重要なので、必ず含めてください。

(良いニュースは、セロリがバージョン 2.7 の箱から出してすぐに Django をサポートすることです)。

于 2012-06-09T12:27:30.387 に答える
4

ubuntu 10.10では、redisをインストールすると起動時に自動的に開始され、セロリと競合していました。これは、セロリが6379ポートでredisに接続できる場合、このポートまたはそのポートを使用するように指示しても、それをバックエンドとして使用するためです。コードは見ていませんが、私の結論です。そのため、必要なポートで redis.conf を使用して実行したすべての redis インスタンスを閉じてから、これらを設定に入れました。

BROKER_URL = 'redis://localhost:8889/0'
REDIS_DB = 0
REDIS_CONNECT_RETRY = True
CELERY_RESULT_BACKEND = 'redis'
CELERY_REDIS_PORT = 8889
BROKER_PORT = 8889
CELERY_RESULT_PORT = 8889
CELERY_TASK_RESULT_EXPIRES = 10
CELERYBEAT_SCHEDULER= 'djcelery.schedulers.DatabaseScheduler'
于 2012-06-09T01:49:46.743 に答える
0

どのバージョンのセロリを使用していますか? 開発バージョンでは、別のデコレータを使用しているようです。

from celery.task import task

@celery.task()
def add(x, y):
    return x + y
于 2012-06-09T01:01:16.923 に答える
0

ポート 8889 で Redis サーバーを起動していますか?

于 2012-06-09T02:01:29.003 に答える