分散式Clery

5545 ワード

前言
Cleryは分散型の任務隊列であることはよく知られていますが、学習の過程で、基本的にはどのようにcelleryを使って非同期的に操作しているかを発見しました.そこで自分の採坑過程を皆さんに分かち合います.
一、準備工作
1.メッセージの中間部品Brokerを選択する
公式のオススメはラビットMQとRedisがあります.具体的なインストールは参考にできます.http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#first-steps本人はRedisを選んでBrokerをします.
2.仮想マシンを用意する
本機と仮想マシンはいずれもredisに接続できるように確保します.他のネットワークを通しているマシンがあってもいいです.
簡単なデモ
1.作成項目とpython環境
mkdir myCelery
cd myCelery
virtualenv -p python2 envp2
source envp2/bin/activate
2.CleryとRedisをインストールする
pip install celery==4.0 
pip install redis
ここに設置されているのは4.0です.公式によると4.0はPythoon 2とpythoon 3をサポートしているバージョンです.公式内容は以下の通りです.
Version Requirements

Celery version 4.0 runs on

Python ❨2.7, 3.4, 3.5❩
PyPy ❨5.4, 5.5❩
This is the last version to support Python 2.7, and from the next version (Celery 5.x) Python 3.5 or newer is required.

If you’re running an older version of Python, you need to be running an older version of Celery:

Python 2.6: Celery series 3.1 or earlier.
Python 2.5: Celery series 3.0 or earlier.
Python 2.4 was Celery series 2.2 or earlier.
Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.
3.コード
vim tasks.py
conding:
from celery import Celery

app = Celery('tasks', broker='redis://10.211.55.2:6379/0')

@app.task
def add(x, y):
    return x + y
4.運転
taskysをウォーカーとして運転します.
celery -A tasks worker -l info
5.任務の開始
もう一つのterminalをオープンします.
cd myCelery
envp2/bin/pyton 
#python terminal  
>>> from tasks import add
>>> add.delay(4, 4)
taskysを運行するterminalを観察して、結果がある8が出てきてすべてが正常であることを証明します.簡単な流れを熟知した後、私達はこの基礎の上でさらに深く入ります.
三、分布式のcelleryは仮想マシンを開けて、tassk.pyをコピーして、python環境配置が完了したら、terminalを開きます.taskysを実行
celery -A tasks worker -l info
この時、本機がtaskysを実行するterminalを観察して、下記の内容を多く出力します.
[2018-01-24 21:03:10,114: INFO/MainProcess]  sync with celery@ubuntu
仮想マシン上のterminalは以下の内容を出力します.
[2018-01-24 21:03:09,007: INFO/MainProcess] Connected to redis://10.211.55.2:6379/0
[2018-01-24 21:03:09,017: INFO/MainProcess] mingle: searching for neighbors
[2018-01-24 21:03:10,036: INFO/MainProcess] mingle: sync with 1 nodes
[2018-01-24 21:03:10,037: INFO/MainProcess] mingle: sync complete
[2018-01-24 21:03:10,052: INFO/MainProcess] celery@ubuntu ready.
これでクラスタは接続に成功しました.これからテストします.当機tasky.py同級にtest_を新設します.tasky.pyファイルは、下記の内容を入力して新たにterminal運転を開始します.
from tasks import add
#    10 add  
for i in range(10):
    add.delay(i, i)
本機のtasks terminalを観察してみましょう.
[2018-01-24 21:37:18,360: INFO/MainProcess] Received task: tasks.add[33586201-082a-4e8f-8153-8b9d757990af]
[2018-01-24 21:37:18,361: INFO/ForkPoolWorker-7] Task tasks.add[33586201-082a-4e8f-8153-8b9d757990af] succeeded in 0.0004948119749315083s: 2
[2018-01-24 21:37:18,362: INFO/MainProcess] Received task: tasks.add[a6e363cf-fd25-4b0d-9da4-04bac1c5476c]
[2018-01-24 21:37:18,363: INFO/MainProcess] Received task: tasks.add[7fd2b545-f87b-49d3-941f-b8723bd1b039]
[2018-01-24 21:37:18,365: INFO/ForkPoolWorker-2] Task tasks.add[7fd2b545-f87b-49d3-941f-b8723bd1b039] succeeded in 0.000525131996255368s: 8
[2018-01-24 21:37:18,365: INFO/ForkPoolWorker-8] Task tasks.add[a6e363cf-fd25-4b0d-9da4-04bac1c5476c] succeeded in 0.000518032000400126s: 6
[2018-01-24 21:37:18,366: INFO/MainProcess] Received task: tasks.add[79d1ead3-1077-4bfd-8300-3a335f533b74]
[2018-01-24 21:37:18,368: INFO/MainProcess] Received task: tasks.add[0d0eefab-c6f0-4fa6-945c-6c7931b74e7b]
[2018-01-24 21:37:18,368: INFO/ForkPoolWorker-4] Task tasks.add[79d1ead3-1077-4bfd-8300-3a335f533b74] succeeded in 0.00042340101208537817s: 12
[2018-01-24 21:37:18,369: INFO/MainProcess] Received task: tasks.add[230eb9d1-7fa5-4f18-8fd4-f535e4c190d2]
[2018-01-24 21:37:18,370: INFO/ForkPoolWorker-6] Task tasks.add[0d0eefab-c6f0-4fa6-945c-6c7931b74e7b] succeeded in 0.00048609700752422214s: 16
[2018-01-24 21:37:18,370: INFO/ForkPoolWorker-7] Task tasks.add[230eb9d1-7fa5-4f18-8fd4-f535e4c190d2] succeeded in 0.00046275201020762324s: 18
仮想マシンのterminalを見てみます.
[2018-01-24 21:37:17,261: INFO/MainProcess] Received task: tasks.add[f95a4a20-e245-4cdc-b48a-4b79416b14c1]  
[2018-01-24 21:37:17,263: INFO/ForkPoolWorker-1] Task tasks.add[f95a4a20-e245-4cdc-b48a-4b79416b14c1] succeeded in 0.00107001400102s: 0
[2018-01-24 21:37:17,264: INFO/MainProcess] Received task: tasks.add[3ddfbcda-7d75-488c-bc69-243f991bb49a]  
[2018-01-24 21:37:17,267: INFO/MainProcess] Received task: tasks.add[b0a36bfe-87c4-43ef-9e6e-fb8740dd26d0]  
[2018-01-24 21:37:17,267: INFO/ForkPoolWorker-1] Task tasks.add[3ddfbcda-7d75-488c-bc69-243f991bb49a] succeeded in 0.00107501300226s: 4
[2018-01-24 21:37:17,270: INFO/ForkPoolWorker-2] Task tasks.add[b0a36bfe-87c4-43ef-9e6e-fb8740dd26d0] succeeded in 0.00111001500045s: 10
[2018-01-24 21:37:17,272: INFO/MainProcess] Received task: tasks.add[7bcec842-65e5-407d-9e7d-99183956ef3e]  
[2018-01-24 21:37:17,277: INFO/ForkPoolWorker-1] Task tasks.add[7bcec842-65e5-407d-9e7d-99183956ef3e] succeeded in 0.000870012001542s: 14
私たちはsuccereded inと後の値だけを観察しました.本機は出力しました.2 6 12 18仮想マシンから出力しました.0 4 10 14は10個のaddタスクがすでに配信処理されたことを十分に証明しました.
終わりの言葉
エクセルの運行規則を理解したら、分散システムを便利に構築することができます.その後、エクセルを書いて、どうやってflashkと統合しますか?エクセルはPython 2とPython 3で使う穴を紹介します.