parallelを使ってコマンドを同時に実行する

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を実行した結果がこちらです。

parallelを使ってコマンドを同時に実行する

2つのサーバーが同時進行でコマンドを実行していることがわかります。

次に9行目のデコレーターをコメントアウトして、コマンドfab paraを実行してみます。

parallelを使ってコマンドを同時に実行する

同じfabコマンドですが、こちらは順番に処理されているのがわかります。

まとめ

並列処理と同じかと思いきや、よくよく考えてみると、一つのサーバーで並列処理されているわけでなく、それぞれのサーバーで同じ関数が同時進行しているということなので、並列処理ってわけではないようです。

サーバーの操作はプログラミングの醍醐味なので、いろいろなコマンドを実行してうまく動作すると気持ちがいいのですが、思わぬところでハマってしまい、予定外に時間を割いてしまうこともあります。

ただ、時間をかけて学習したところは、記憶に残るので、無駄にはなりませんし、解決すれば満足度も高くなります。

継続は力なり

という言葉を忘れずにPython学習を継続していきます。

それでは明日もGood Python!