Python Fabric runs_onceの使い方

Python学習【365日チャレンジ!】249日目のマスターU(@Udemy11)です。

日本人ならあまり興味がないかもしれませんが、11月3日はアメリカ大統領を決める投票日です。

日本では無茶ぶりな政策が強調されているトランプ大統領ですが、「なぜそんなに支持する人々が多いのか?」ということが前から気になっていました。

このコロナ過でマスクもつけずにコロナに感染して、さらにホワイトハウスがクラスター化している事態で、しかも選挙活動のために自分勝手に退院してコロナウィルスをまき散らすような大統領です。

ほんと、なぜ?としか思えないんですよね。

そんな疑問を解決してくれた記事がこちら

大衆心理をうまくつかんで利用しているわけです。

カエサルの言葉で「人は自分が見たいものしか見ない」という有名な言葉がありますが、トランプ大統領は労働階級の白人たちに「自分たちが一番だったアメリカを取り戻そう!」と訴えて、自分が見たいものを見せてあげていることが、支援者支援者たちの支持基盤を確固たるものにしているようです。

とはいえ流石に少しずつ現実をみはじめた人が増えてきているようですが、アメリカ大統領選の結果はどうなるんでしょうね。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、実行結果を活用して処理を行うexecuteの使い方を学習しました。

非常に簡単に紹介しましたが、取得した値を辞書型データにして、データを活用できるようにするのがexecuteでした。

具体的な使い方は紹介できていませんが、サーバーのファイル一覧を取得して、ホストと取得した値を辞書型に入れた返り値を取得することができました。

詳細については、昨日の記事を参考にしてみてください。

今日は、処理を一度だけ行うruns_onceを学習します。

runs_once

サーバーの初期設定など、1回実行すればあとは実行する必要がない場合に使えるのがruns_onceです。

from fabric.api import env, runs_once

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',
}

@runs_once
def db_init():
    print('init')

def deploy_db():
    db_init()

1行目でruns_onceを読み込んで、データベースの初期化をするための関数db_initを作っています。

例なので、11行目では、print('init')としてinitを出力する関数にしています。

13行目の関数deploy_db@runs_onceをデコレーターにしたdb_initを実行しています。

実行結果

Python Fabric runs_onceの使い方

結果を見るとわかりますが、server1ではinitが出力されていますが、server2では出力されていません。

2つのサーバーで一度だけ実行されるのかと思いきや、最初のサーバーでのみdb_init()が実行されています。

runs_onceの関数は1度だけ実行されるので、上記のプログラムコードの最後の行にdb_init()を付け加えて2回実行しようとしてもruns_onceでデコレートされているので、上記と同じ実行結果になります。

runs_onceは、クライアントのサーバーで一度だけ実行するのではなく、先頭のサーバーのみで実行されるということです。

まとめ

酒井さんの講座では、使用頻度の高いコードを広く浅く紹介しているので、余り深いところまでは解説されていません。

Udemy講師 酒井さん プログラミング Python

まー、全てを深く解説していると、時間がかかりすぎて、講座としては成り立たないので、あとは自分で調べてより複雑な使い方を学んでいく必要があります。

どんな学習でも、自己学習、自己研鑽は必要不可欠だということですね。

それでは明日もGood Python!