Python環境下で非同期タスクキューを使ったCleryの基礎教程をインストールします。
1.概要
cellery(セロリ)は非同期の作業行列であり、分散式メッセージに基づいて伝達される作業行列である。リアルタイム操作に重点を置いていますが、スケジュールのサポートもいいです。
セルリーは生産システムで毎日数百万の仕事を処理します。
エクセルはPythonで作成されていますが、このプロトコルはどの言語でも実現できます。他の言語とwebhook sによっても実現できます。
提案されたメッセージエージェントRabbilityMQは、Redis、Benstalk、MongoDB、CouchDB、およびデータベースを提供しています。
エクセルyはDjango、Pylons and Flashkを集めやすいので、django-celleryを使って、cell y-pylons and Flaask-Celeryは包装を付け加えてもいいです。
2.据え付け
上の概念があります。このようなものをインストールする必要があります。RabitMQ、SQLAlchemy、Clery
インストールも簡単です。ラビットMQ:
macの下:
インストールが完了したら、サービスを開始します。
3.簡単なケース
あなたの前のラビットMQが起動されていることを確認します。
それとも公式サイトの例ですか?任意のディレクトリにtasky.pyのファイルを新規作成した内容は以下の通りです。
ウィンドウを開けたままにして、新しいウィンドウを開けてインタラクティブモードに入ります。pythonまたはipython:
しかし、この時点で一つの問題があります。このタスクの実行結果と状態を知りたいです。最後まで終わりましたか?ですから、バックエンドを設置する必要があります。
修正前のtasky.pyのコードは以下の通りです。
同じくpythonに入るインタラクティブモデル:
上のテストを終えてから、Celryは分散型任務管理と呼ばれていますが、分布式はどこにありますか?その任務はどのように実行されますか?どのマシンで実行しますか?
現在のサーバ上のcelleryサービスがクローズされていない場合、同じ方法で別のサーバにCleryをインストールして起動します。
その後pythonインタラクティブモードに入ります。
5.RabbiitMQ遠隔接続の問題
テスト開始時にリモートサーバーがローカルのRabbiitMQサービスに接続できなくなりました。その後、設定権限が必要であることが分かりました。IP_ADDRESS=127.1.0.1のipは0.0.0です。
6.まとめて言う
この文章は簡単にCelleryの使用を紹介していますが、ポイントはやはり分布式の使用です。あまりすっきりしないと思うのは、拡張時にコードを再配置する必要があります。直接にtaskyを共有できるのではなく、Cleryはtaskを通じて異なるworkerとのマッチングができるかもしれません。まだよく分かりません。深く使ってから話します。
cellery(セロリ)は非同期の作業行列であり、分散式メッセージに基づいて伝達される作業行列である。リアルタイム操作に重点を置いていますが、スケジュールのサポートもいいです。
セルリーは生産システムで毎日数百万の仕事を処理します。
エクセルはPythonで作成されていますが、このプロトコルはどの言語でも実現できます。他の言語とwebhook sによっても実現できます。
提案されたメッセージエージェントRabbilityMQは、Redis、Benstalk、MongoDB、CouchDB、およびデータベースを提供しています。
エクセルyはDjango、Pylons and Flashkを集めやすいので、django-celleryを使って、cell y-pylons and Flaask-Celeryは包装を付け加えてもいいです。
2.据え付け
上の概念があります。このようなものをインストールする必要があります。RabitMQ、SQLAlchemy、Clery
インストールも簡単です。ラビットMQ:
macの下:
brew install rabbitmq
linux:
sudo apt-get install rabbitmq-server
残りの二つは全部Pythonのものです。直接pipをインストールすればいいです。MySQLドライバをインストールしたことがない学生にはMySQL-pythonをインストールする必要があります。インストールが完了したら、サービスを開始します。
$ rabbitmq-server[ ]
起動後はウィンドウを閉じずに新しいウィンドウ(Tab)を操作します。3.簡単なケース
あなたの前のラビットMQが起動されていることを確認します。
それとも公式サイトの例ですか?任意のディレクトリにtasky.pyのファイルを新規作成した内容は以下の通りです。
from celery import Celery
app = Celery('tasks', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
同じクラスのディレクトリで実行:
$ celery -A tasks worker --loglevel=info
このコマンドは、ワーカーを起動して、taskのタスク(add(x,y)をキューに入れるという意味です。ウィンドウを開けたままにして、新しいウィンドウを開けてインタラクティブモードに入ります。pythonまたはipython:
>>> from tasks import add
>>> add.delay(4, 4)
ここで、あなたはすでにcell eryを使ってタスクを実行できます。上のpythonインタラクティブモードでは、addタスクを簡単に呼び出し、4,4パラメータを伝達します。しかし、この時点で一つの問題があります。このタスクの実行結果と状態を知りたいです。最後まで終わりましたか?ですから、バックエンドを設置する必要があります。
修正前のtasky.pyのコードは以下の通りです。
# coding:utf-8
import subprocess
from time import sleep
from celery import Celery
backend = 'db+mysql://root:@192.168.0.102/celery'
broker = 'amqp://[email protected]:5672'
app = Celery('tasks', backend=backend, broker=broker)
@app.task
def add(x, y):
sleep(10)
return x + y
@app.task
def hostname():
return subprocess.check_output(['hostname'])
backendを追加する以外に、複数のサーバーの操作をテストするためにwhoの方法を追加しました。修正が完了したら、前のように起動します。同じくpythonに入るインタラクティブモデル:
>>> from tasks import add, hostname
>>> r = add.delay(4, 4)
>>> r.ready() # 10s , False, add sleep 10s
>>>
>>> r = hostname.delay()
>>> r.result # hostname
4.マルチサーバをテストする上のテストを終えてから、Celryは分散型任務管理と呼ばれていますが、分布式はどこにありますか?その任務はどのように実行されますか?どのマシンで実行しますか?
現在のサーバ上のcelleryサービスがクローズされていない場合、同じ方法で別のサーバにCleryをインストールして起動します。
$ celery -A tasks worker --loglevel=info
前のサーバーのCelleryサービスからあなたが起動したサーバーのhostnameを出力しています。そのサーバーがあなたのrabitmqに接続されていることが前提です。その後pythonインタラクティブモードに入ります。
>>> from tasks import hostname
>>>
>>> for i in range(10):
... r = hostname.delay()
... print r.result # hostname
>>>
あなたが入力した内容を見てください。2台のサーバーであなたがエクセルサービスの出力を開始しました。5.RabbiitMQ遠隔接続の問題
テスト開始時にリモートサーバーがローカルのRabbiitMQサービスに接続できなくなりました。その後、設定権限が必要であることが分かりました。IP_ADDRESS=127.1.0.1のipは0.0.0です。
6.まとめて言う
この文章は簡単にCelleryの使用を紹介していますが、ポイントはやはり分布式の使用です。あまりすっきりしないと思うのは、拡張時にコードを再配置する必要があります。直接にtaskyを共有できるのではなく、Cleryはtaskを通じて異なるworkerとのマッチングができるかもしれません。まだよく分かりません。深く使ってから話します。