セロリの使用--- 3

#セロリ使用

1.broker

2.基本ケース

Redisのは、ブローカーとbrokendとして使用します。

tasks.pyの作成

# tasks.py
di = 'redis://:****@localhost:6379/0'
app = Celery('tasks', backend=di, broker=di)

@app.task
def add(x, y):
    return x + y

运行:
セロリ-Aタスクワーカー-l情報-P eventlet

创建temp.py
#1 temp.py
タスクから追加インポート
RV = add.delay(4、4)

2.1業績:

実行されるタスク

E:\python\code test>celery -A tasks worker -l info -P eventlet

 -------------- celery@*** v4.3.0 (rhubarb)
---- **** -----
--- * ***  * -- Windows0 2019-09-21 22:08:04
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x1aebfdcf98
- ** ---------- .> transport:   redis://:**@localhost:6379/0
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 4 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . tasks.add

[2019-09-21 22:08:04,802: INFO/MainProcess] Connected to redis://:**@192.168.199
.113:6379/0
[2019-09-21 22:08:04,813: INFO/MainProcess] mingle: searching for neighbors
[2019-09-21 22:08:05,849: INFO/MainProcess] mingle: all alone
[2019-09-21 22:08:05,886: INFO/MainProcess] celery@*** ready.
[2019-09-21 22:08:05,905: INFO/MainProcess] pidbox: Connected to redis://:**@...../0.

実行一時

[2019-09-21 22:11:27,198: INFO/MainProcess] Received task: tasks.add[06d745c6-53
18-4f48-8a1e-2ab8f8563994]
[2019-09-21 22:11:27,200: INFO/MainProcess] Task tasks.add[06d745c6-5318-4f48-8a
1e-2ab8f8563994] succeeded in 0.0s: 8
[2019-09-21 22:11:31,935: INFO/MainProcess] Received task: tasks.add[115c3b5d-eb
a7-472b-86ab-bd356f650e13]
[2019-09-21 22:11:31,936: INFO/MainProcess] Task tasks.add[115c3b5d-eba7-472b-86
ab-bd356f650e13] succeeded in 0.0s: 8

2.2問題

二つの問題は、実行時に発生します:

  1. 問題のRedisの-PYバージョン、2は現在のアップグレードが必要です*
    ピップ--upgradeはRedisのインストール
    *** 4へのアップグレード
  2. エラーとValueError:解凍しないように十分な値( 3期待は、0しまった)
    ソリューション:
    見て他の人は、この問題が発生したcelery4.xを説明し、解決策は、おそらくwin10上で実行するには、次の、未知の原理を言うことです。

    安装`eventlet
    ピップeventletをインストール

    そして、開始時間パラメータの労働者は、次の追加:
    セロリを-A 労働者-l情報eventlet -P
    、あなたが正常に呼び出すことができます。

3.より複雑なテスト環境

一般的に、セロリのプロジェクトコードは、3つの部分に分かれています。

  1. 労働者の定義
  2. 定義されたタスク
  3. タスクを追加します

構造:

PROJ / __ init__.py 
    ワーカー#定義/celery_worker.py 
    /celery_tasks.py#タスクを定義し
    /celery_run.py#コール

PROJ / celery_worker.py

- #セロリテスト作業員
セロリのインポートセロリから

di_broker = '://::[email protected] 6379/0 Redisの' 
di_backend = 'のRedis://:[email protected]:1分の6379' 

DEF create_worker() :
    #アプリ=セロリ( 'タスク'、ブローカー= DI)
    アプリ=セロリ( 'タスク'、
             バックエンド= di_backend、
             ブローカー= di_broker、
            含ま= [ 'code_2.celery_tasks'])

    app.conf.update(result_expires = 3600、 )
    リターンアプリの

アプリ= create_worker()


の場合__name__ == '__main__':
    app.start()
    

PROJ / celery_tasks.py

celery_workerから輸入アプリの

@のapp.taskは
デフ追加の(x、y):
    リターンX + Y 

@ app.task 
デフMUL(X、Y):
    リターンのx * yを

@ app.task 
デフxsum(番号):
    リターン・サム(番号)

PROJ / celery_run.py

#セロリ試験
celery_tasksインポートから追加
RV = add.delay(4、4)

外= rv.get(タイムアウト= 1)
プリント(OUT)
アウト= rv.ready()
プリント(アウト)

woker開始
セロリ-A celery_tasks労働者が情報-P eventlet -l

wokerの停止
Ctrl + Cを

完全に、次のテストより複雑な機能を構築するためのテスト環境。

4.callingタスク

インターフェース

追加(4、4)#ローカル呼び出し
add.delay(4、4)#ワーカーが実行する
。これは、実際には別の引数)(apply_async呼び出されるメソッドへのショートカット方法A-スターIS:
add.apply_async((2、2))
以上を使用することができますマルチパラメータ
add.apply_async((2、2)、キュー=「LoPriの」、カウントダウン= 10)
の文の代わりには、実行する前に、少なくとも10秒待って、タスクキューをLoPriのために送られました

各タスクは、上記のID 1に割り当てられ、
遅延とapply_async方法では、AsyncResultのインスタンスを返し
、指定のバックエンドは、あなたが任務の実装を表示することができた場合

RES = add.delay(2,2)
res.get(タイムアウト= 1)
4

あなたは、id属性を見て、タスクのIDを見つけることができます:
res.id
d6b3aea2-fb9b-4ebc-8da4-848818db9114

あなたは、タスクが実際のresult.getに、例外が発生した場合も、例外とトレースバックを調べることができます()はデフォルトですべてのエラーを伝播します:
RES = add.delay(2)
res.get(タイムアウト= 1)

:あなたが伝播するエラーを望まないなら、あなたは伝播引数を渡すことでことを無効にすることができます
res.get(偽=伝播)
はTypeErrorが(「(追加)を正確に2つの引数(1が指定された)を取り」)

5.server /労働者

5.1根拠を説明

(vir_venv)E:\ Pythonの\コード>セロリ-A celery_tasks労働者-l情報-Pのeventlet 

 --------------セロリ@ ** v4.3.0(ダイオウ)
---- * *** ----- 
--- * *** * - Windowsの-8.1から6.3まで。2019年9月22日10時50分49秒
- * - **** --- 
- ** ---------- [設定] 
- ** ---------- 。>アプリ:タスク:0x38ac527d30 
- ** ---------->輸送:Redisの://:** @ ***:6379/0 
- ** -------- - >結果:Redisの://:** @ ***:1分の6379 
- *** --- * --->同時実行:4(eventlet)#并发数
- ***** 。** ---->タスクイベント:OFF(この作業員のタスクを監視するために-Eを有効にする)
--- ***** ----- 
 -------------- [キュー] 
                >セロリ交換=セロリ(ダイレクト)キー=セロリ

各ミッションの代わりに、本明細書eventletで使用されるように別のスレッドで実行されます。
タスクイベントのパラメータは、労働者を監視するかどうかを決定します

5.2バックグラウンドで実行されています

セロリマルチスタートworker1 -A celery_worker -l情報
セロリマルチリスタートW1 -A projの-l情報   
セロリマルチストップW1 -A projの-l情報
#等待执行完成の
セロリマルチstopwait W1 -A projの-l情報

6.task複合構造/ワークフロー

タスクは、以下のメソッドをサポートしています。


add.signature((2、2)、カウントダウン= 10)
tasks.add(2、2)
スターの引数を使用してショートカットもあります。

add.s(2,2)
tasks.add(2,2)

DEF関数func2():
R = add.s(2,2)
pr_type(R)
RV = r.delay()
アウト= rv.get(タイムアウト= 5)
プリント(OUT)
アウト= rv.ready()
プリント(OUT )

これは、部分的なように見えますが、また、その目的を使用してタスクの実質的なパッケージは、より複雑なタスク構造を構築することです。
以下のサポートを組み合わせた構造:
チャンクのグループ地図Starmapのは和音alberghieraカテナです

例としてグループ化するには:

>>> G =基(add.s(I)Iはxrange(10)用)
>>> G(10)に.get()
[10、11、12、13、14、15、16、17、18 、19]

おすすめ

転載: www.cnblogs.com/wodeboke-y/p/11600951.html