Linux システム管理の大規模ジョブ: Celery を使用して分散コンピューティングを実現する

予備知識ゼロ

1 セロリの基本

  Celery は Python で実装された非同期タスク キュー/分散メッセージングに基づいたジョブ キューであり、
  そのアーキテクチャは
    メッセージ ミドルウェア (ブローカー)、
    タスク実行ユニット (ワーカー)、
    タスク実行結果ストレージ (リザルト)の 3 つの部分で構成されます。

  セロリの使用には次の 3 つの側面があります。
    1. タスク関数を定義します。
    2. Celery サービスを実行します。
    3. クライアント アプリケーションの呼び出し。

2 本稿の環境

  主な側面は 3 つあります。
    2 つの Ubuntu 18.04
    Python3
    pip3

この文書で実行される 3 つのステップ

  1. Node1 の構成 (タスクとミドルウェアの送信)
    1. Redis をインストールして起動するように構成します (ミドルウェアとして、結果を保存します)
    2. Celery をインストールします
  2. Node2 の構成 (タスクの受信と完了に使用します)
    1. Redis のインストール (構成は必要ありません)
    2. Celeryのインストール
  3. Pythonのプログラムを書く
    1. Worker上でプログラムを書く
    2. ミドルウェアにタスクを発行するプログラムを書く
  4. 実行



以下は本文です


1.node1の設定(タスクとミドルウェアの送信)

1. Redis をインストールして起動するように設定する

1.1 RedisとPythonライブラリをインストールする

stfnode1@ubuntu:~$ sudo apt-get install redis-server
stfnode1@ubuntu:~$ pip3 install redis

1.2 Redis の構成

注意事項に注意してください
#通过这个命令获取node1的IP地址,并且记住
stfnode1@ubuntu:~$ ifconfig 
#我的IP是192.168.30.139
stfnode1@ubuntu:~$ sudo vim /etc/redis/redis.conf
#找到bind 127.0.0.1 ::1在69行左右
#将127.0.0.1 改为自己的IP地址
# ::1 删掉
#其余地方不用改动,直接保存退出

1.3 設定ファイルを使用して Redis を起動する

sudo redis-server /etc/redis/redis.conf

2.セロリをインストールする

sudo apt install python-celery-common

この時点で Celery がインストールされます


2. Node2 の構成 (タスクの受信と完了に使用)

1. Redis と Python ライブラリをインストールします (構成は必要ありません)

stfnode2@ubuntu:~$ sudo apt-get install redis-server
stfnode1@ubuntu:~$ pip3 install redis

2.セロリをインストールする

stfnode2@ubuntu:~$ sudo apt install python-celery-common
stfnode2@ubuntu:~$ pip3 install celery[redis]


この時点で、環境を構成する必要があります
次にPythonプログラムを書き始めます↓

3. Python プログラムを作成する

1. ノード1にプログラムを書き込みます。

①新しいtasks.pyを作成します。内容は次のとおりです。

from celery import Celery
# 注意: 这里*.*.*.*替换成配置文件中修改的地址即可
app = Celery('tasks',broker='redis://*.*.*.*:6379',backend='redis://*.*.*.*:6379')

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

②新しい Runtasks.py を作成します。内容は次のとおりです。

from tasks import add
from celery.result import AsyncResult
import redis
import time

a = int(input("input first number:"))
b = int(input("input second number:"))

id_my=add.delay(a,b)

time.sleep(1)

res=AsyncResult(str(id_my)) # 参数为task id
print(str(id_my))
print(res.result)

注: ここでの task.py と Runtasks.py は同じディレクトリ (つまり、フォルダー) にある必要があります。
: task.py の *.* .*.* を構成ファイルで変更されたアドレスに置き換えることを忘れないでください。
現在のディレクトリを終了しないことをお勧めします

2. ノード2にプログラムを書き込みます。

ノード 2 はワーカーとして、ノード 1 上のミドルウェア公開タスクを常に監視し、タスクの完了後にデータをノード 1 の Redis に返します。
次の内容を含む新しい task.py を作成します。

from celery import Celery
# broker设置中间件,backend设置后端存储
app = Celery('tasks',broker='redis://*.*.*.*:6379',backend='redis://*.*.*.*:6379')
@app.task
def add(x,y):
  return x+y

注: 現在のディレクトリを終了しないことをお勧めします。
注:tasks.py の *.* .*.* を構成ファイルで変更されたアドレスに置き換えることを忘れないでください。

4、走る

1. ノード2のセロリでタスクを実行します。

  task.py が配置されているディレクトリで次のコマンドを実行すると、ノード 2 のセロリはノード 1 のミドルウェアによって割り当てられたタスクを常に監視します。

celery -A tasks worker --loglevel=info

結果は次のとおりです
ここに画像の説明を挿入

2.node1 リリースタスク

  task.py と Runtask.py が配置されているディレクトリで次のコマンドを実行し、Runtask.py を実行します。

python3 Runtasks.py

3. 結果を表示する

  この時点で、次の図に示すように、node2 で結果が表示されます。
ここに画像の説明を挿入


参考記事

  1. Ubuntu16.04 での erlang のインストールと Rabbitmq のインストール手順
  2. Python 並列分散フレームワーク Celery - まず泥棒を捕まえる
  3. セロリ暫定版 - 公式ドキュメント
  4. RabbitMQ の使用-Celery 3.1 公式ドキュメント
  5. Python 並列分散フレームワーク Celery の詳しい説明 (次のステップです)
  6. redis-server プロンプトをオンにします # サーバーの TCP リスニング ソケットの作成 *:6379: バインド: アドレスは既に使用されています – 解決策
  7. python+celery报错:コンシューマ:redis://127.0.0.1:6379/10に接続できません:接続エラー111
  8. Celery に基づいて複数のクラウド サーバーに分散
  9. Celery | Flask エラー: バイトのようなオブジェクトが予期されましたが、AsyncResult が見つかりました
  10. Celery はタスクの実行結果を取得します
  11. Celery によって Redis に保存された結果を表示するにはどうすればよいですか?
  12. Python – Redis接続と使用
  13. Python で遅延操作を実装するいくつかの方法
  14. Python で文字列を連結するいくつかの方法
  15. Pythonデータストレージエクセル
  16. modulenotfounderror:「xlwt」という名前のモジュールがありませんソリューションPython Padans出力Excelエラー

能力には限界がありますので、間違いがあればご指摘ください

おすすめ

転載: blog.csdn.net/Stanford_sun/article/details/121418923