python
  • django
  • redis
  • celery
  • 2016-12-01 7 views 1 likes 
    1

    私の問題は、私がtest()を呼び出そうとするとかなりうまくいくが、test.delay()を呼び出すと "未登録のタスクを返す"ということです。Celery Redisが "タイプの未登録のタスクを受け取りました"

    サービスを開始します。テストを()を実行している enter image description here

    とtest.delay test.delayから()(あなたが見ることができるように、最初のものは動作します。) enter image description here

    結果()

    enter image description here

    settings.py

    BROKER_URL = 'redis://localhost:6379/0' 
    CELERY_ACCEPT_CONTENT = ['json'] 
    CELERY_TASK_SERIALIZER = 'json' 
    CELERY_RESULT_SERIALIZER = 'json' 
    CELERY_IMPORTS=("tasks") 
    
    INSTALLED_APPS = (
        "systech_account", 
        #... 
    ) 
    

    tasks.py

    from __future__ import absolute_import 
    
    from celery import shared_task 
    
    @shared_task 
    def test(): 
        return "Just a Test" 
    

    celeryconfig.py

    from __future__ import absolute_import 
    
    import os 
    from celery import Celery 
    from django.conf import settings 
    
    # set the default Django settings module for the 'celery' program. 
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'root.settings') 
    
    app = Celery() 
    # Using a string here means the worker will not have to 
    # pickle the object when using Windows. 
    app.config_from_object('django.conf:settings') 
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 
    


    私はジャンゴ

    • 使用しています1.9
    • セロリ4.0
    • Redisのサーバーは2.8.4
    • のPython 2.7
    • のUbuntu 14.04

    答えて

    0

    だけrestartiセロリはあなたの問題を解決するはずです。これは、test()に電話すると単なる方法であるため、事前登録は必要ありません。

    test.delay()を呼び出すと、ブローカにメッセージ(タスク)が送信され、そのメッセージが作業者によって取り出されます。この作業者は、セロリが開始される前に登録されたタスクしか知りません。そのため、セロリを起動した後に実装されるタスクは検出されません。

    EDITは

    ところで、私が指摘し、他の事はあなたがTasks.pyとしてあなたのファイルを名付けているように見えるということです。 でなければなりません。代わりにCeleryがタスクを正常に自動検出するためにtasks.pyにする必要があります。

    +0

    お返事ありがとうございます。 「セロリを再起動する」と言ったら、* celeryを再実行することを意味します--app = root.celery:app worker --loglevel = INFO *?もしそうなら、私はすでにそれをしましたが、運はありません。 Tasks.pyについては、単なるタイプです。それを指摘してくれてありがとう。 – aldesabido

    0

    djceleryはCelery 4.0をサポートしておらず、代わりに3.1.25をインストールするので、djceleryとアンインストールセロリを使用して解決しました。

    関連する問題