Python学習【365日チャレンジ!】247日目のマスターU(@Udemy11)です。
寒くなってきたと思って扇風機をかたづけると夏が戻ってきたような暑さになって再び扇風機を取り出しました。
ここ数年はほんとに寒くなり出したかと思ったら暑くなったり、暑くなり出したと思ったら寒くなったり、変な気候が多いですよね。
もしかしたら、過去でもこんな気候があったのかもしれませんが、天候は予定調和のほうが過ごしやすくていいんですけど。。。
ほんとどうなってるんでしょうね~最近の天候は。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、task
の使い方を学習しました。
task
を使ってFabricのコマンドで使える関数を指定することができました。
また、関数内関数を使うことで、task
でデコレートした関数も使うことができました。
詳細については、昨日の記事を参考にしてみてください。
今日は、サーバーの並列処理ができるparallel
を学習します。
parallel
parallel
は、平行という意味ですが、同時処理ができるFabricのデコレーターです。
これまでにのコードでは、サーバーが2つあって、コマンドの実行は、1つのサーバーで処理が終了してから次のサーバーでコマンドを実行していました。
parallel
を使うことで、同時にコマンドの処理をすることができます。
from fabric.api import run, env, parallel
env.hosts = ['root@172.16.200.101:22', 'root@172.16.200.102:22']
env.passwords = {
'root@172.16.200.101:22': 'root',
'root@172.16.200.102:22': 'root',
}
@parallel(pool_size=2)
def para():
run('ls -a')
最初にparallel
をインポートして、これまで同様に3行目から7行目でのenv
でホストとパスワードを指定しています。
9行目でparallel
をデコレーターにして、引数にpool_size=2
と指定してコマンドls -a
を実行しています。
ターミナルでコマンドfab para
を実行した結果がこちらです。
2つのサーバーが同時進行でコマンドを実行していることがわかります。
次に9行目のデコレーターをコメントアウトして、コマンドfab para
を実行してみます。
同じfab
コマンドですが、こちらは順番に処理されているのがわかります。
まとめ
並列処理と同じかと思いきや、よくよく考えてみると、一つのサーバーで並列処理されているわけでなく、それぞれのサーバーで同じ関数が同時進行しているということなので、並列処理ってわけではないようです。
サーバーの操作はプログラミングの醍醐味なので、いろいろなコマンドを実行してうまく動作すると気持ちがいいのですが、思わぬところでハマってしまい、予定外に時間を割いてしまうこともあります。
ただ、時間をかけて学習したところは、記憶に残るので、無駄にはなりませんし、解決すれば満足度も高くなります。
継続は力なり
という言葉を忘れずにPython学習を継続していきます。
それでは明日もGood Python!