DjangoのセロリでPython-使用

.Djangoで要求

  応答を得るために1から開始されたDjangoのウェブhttpリクエストは、htmlページ・プロセスを返し、次のとおりです。

    httpリクエストが開始します 

    ミドルウェアの後

      HTTP(リクエストを解析)の取り扱い 

    URLマッピング(URL一致がビューに対応する発見されました) 

    ビューのロジック(含む追加と削除Modelクラスが変更されたデータベース検索を呼び出します)

    ミドルウェアの後

    対応するテンプレート/レスポンスを返します。

  

  同期要求:すべてのロジックの処理、応答ビューのデータコンピューティングタスクを処理した後に戻りました。ページまで待ち状態のタスクを処理する際の表示ユーザーが結果を返します。

  非同期リクエスト:最初のリターン応答を表示して、バックグラウンド処理タスクインチ ユーザーがサイトを閲覧し続けることができ、待つ必要はありません。タスク処理が完了すると、私たちは、ユーザに知らせることができます。

二.Djangoはセロリを使用します

インストール

PIP3ジャンゴ・セロリをインストール

コンフィギュレーション

  次のように最初のDjangoプロジェクトを作成して構成されています。

                

 

 

    別の兄弟ディレクトリがceleryconfig.pyプロファイルを追加のsettings.pyした後、設定情報の詳細は、公式ドキュメントを参照することができます。

インポートdjcelery
 から日時インポートはtimedelta 

djcelery.setup_loader() 

导入任务 
CELERY_IMPORTS = [
     ' celeryapp.tasks ' 
] 
设置队列 
CELERY_QUEUES = {
     ' beat_tasks ' {:
         ' 交流'' beat_tasks ' ' EXCHANGE_TYPE '' 直接' ' binding_key '" beat_tasks' 
    }、
    ' Work_queue ' :{
         ' 交流'' work_queue ' ' EXCHANGE_TYPE '' 直接' ' binding_key '' work_queue " 
    } 
} デフォルトのキューを設定し、キューはデフォルトキューに他のタスクを満たしていない 
CELERY_DEFAULT_QUEUE = ' work_queue 'いくつかの例には、デッドロックを防ぐことができ 
CELERYD_FORCE_EXECV = 同時の数を設定し 
CELERYD_CONCURRENCYを。4 = 






漏れメモリ防止するために、100まで実行する各ワーカータスク 
CELERYD_MAX_TASKS_PER_CHILDは= 100 シングルタスク実行時間までは 
CELERYD_TASK_TIME_LIMIT * = 12は、30であるタイミング行わ設定する 
CELERYBAET_SCHEDULE = {
     タスク1 {:
         タスクコースタスク' スケジュール':はtimedelta(= 5秒。)、
         ' オプション' :{
             ' キュー'' beat_tasks ' 
        } 
    } 
} 
CELERY_ACCEPT_CONTENT




= [ ' 漬物'' JSON ' 、] 

BROKER_BACKEND = ' Redisの' 
BROKER_URL = ' のRedis:// localhostを:1分の6379 ' 
CELERY_RESULT_BACKEND = ' のRedis:// localhostを:2分の6379 '
celeryconfig.py
.celeryconfig インポート *   导入セロリ配置信息


INSTALLED_APPS = [
     ' django.contrib.admin ' ' django.contrib.auth ' ' django.contrib.contenttypes ' ' django.contrib.sessions ' " django.contrib。メッセージ' ' django.contrib.staticfiles ' ' celeryapp.apps.CeleryappConfig ' ' djcelery "サインセロリ  
]
settings.py
インポートから celery.taskのインポートタスク


クラス:コース(タスク) = ' もちろん、タスク' 

    DEF実行(自己、* argsを、** kwargsから):
         プリント' スタート... ' 
        time.sleep( 3 印刷(F ' 引数の引数= {}、kwargsから= {kwargsから} ' プリント' 末端タスク.... '
tasks.py
django.http インポートjsonResponse
 から celeryapp.tasks インポートコース、


DEFコース、(要求、* argsを、** kwargsから):
    非同期タスクを実行する
    印刷" スタートコース、... " Course.delay() 
    apply_async転送を使用することができますパラメータは、キューを指定 
    Course.apply_async(引数=(' こんにちは'、)、キュー= ' work_queue ' を印刷" コースを終了しますが... " を返す jsonResponse({ " の検索結果を'' OK " })
views.py
django.contribのインポート管理者
 から django.urls インポート経路
 から celeryapp.views インポートコース

urlpatterns = [ 
    パス(' 管理/ ' 、admin.site.urls)、
    パス(' コース/ ' 、コース)
]
urls.py

Redisのは、メッセージブローカとして開始しました

Redisのサーバー 

Djangoプロジェクトを訪問し、その後、開始8000 /コース、/:// localhostを:HTTPを、タスクをトリガー

python manage.pyのrunserver

スタートワーカー

python manage.pyセロリワーカー-l情報   

    あなたは任務の設定と実装を表示することができます:

            

 

 

      

 

 

      

 

 

 スタートビート

python manage.pyセロリは-l情報を倒します

         

 

 

 III。一般的なエラー

♦  AttributeError: ‘str’ object has no attribute ‘items’

解决方法: redis版本过高,降低redis版本即可

pip install redis==2.10.6

 

♦  from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger SyntaxError: invalid syntax

  这个是python3.7目前不支持kombu,降低python版本至3.6即可,可以使用conda进行直接安装

conda install python=3.6.8

 四.过程监控

  Celery提供了一个工具flower,将各个任务的执行情况、各个worker的健康状态进行监控并以可视化的方式展现。

安装监控

pip install flower

执行flower

python manage.py celery flower

本地端口:5555查看监控

刷新course页面,查看tasks,发现有刚刚执行完成的任务

  查看broker

 

 进入Monitor查看任务执行情况,执行成功,执行失败,消耗的时间,队列里面的任务情况

点击的worker查看具体worker情况 

 可以给flower添加密码认证,添加之后再访问则需要输入用户名和密码

python manage.py celery flower --basic_auth=username:password 

 

おすすめ

転載: www.cnblogs.com/zivli/p/11517797.html