#セロリ使用
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問題
二つの問題は、実行時に発生します:
- 問題のRedisの-PYバージョン、2は現在のアップグレードが必要です*
ピップ--upgradeはRedisのインストール
*** 4へのアップグレード
エラーとValueError:解凍しないように十分な値( 3期待は、0しまった)
ソリューション:
見て他の人は、この問題が発生したcelery4.xを説明し、解決策は、おそらくwin10上で実行するには、次の、未知の原理を言うことです。安装`eventlet
ピップeventletをインストールそして、開始時間パラメータの労働者は、次の追加:
セロリを-A労働者-l情報eventlet -P
、あなたが正常に呼び出すことができます。
3.より複雑なテスト環境
一般的に、セロリのプロジェクトコードは、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]