Pythonのatexitモジュールでプログラム終了時の処理を登録する方法
Pythonのatexitモジュールとは
Python標準ライブラリに含まれるatexitモジュールは、register()とunregister()という2つの関数を提供しています。いずれも既存の関数を引数として受け取ります。ここで登録された関数は、インタプリタのセッションが正常に終了した際に自動的に実行されます。
複数の関数が登録された場合、それらは登録された順序と逆の順番で実行される点に注意してください。たとえば、f1()、f2()、f3()の順に関数を登録すると、実際にはf3()、f2()、f1()の順に呼び出されます。
unregister()関数を使うと、自動実行対象のリストから指定した関数を削除できます。
基本的な使い方:関数を登録する
以下のコードは、プログラム終了時に自動実行される関数を登録する例です(注意:このコードはIDLEではなくコマンドラインから実行してください)。ユーザーから数値を順次入力して合計を求め、ループを抜けると登録済みのsavetotal()関数が自動的に呼び出され、合計値がファイルに保存されます。
import atexit
sum = 0
def savetotal():
fo = open("atexit.txt", "w")
fo.write(str(sum))
print("sum written to file")
fo.close()
atexit.register(savetotal)
while True:
n = int(input("enter a number. -1 to exit"))
if n == -1:
break
sum = sum + n
print(sum)
上記のコードを「atexit-example.py」という名前で保存し、コマンドラインから実行します。入力された数値が順次加算され、最後に合計値がatexit.txtに書き込まれます。
C:\python36>python atexit-example.py enter a number. -1 to exit4 enter a number. -1 to exit6 enter a number. -1 to exit3 enter a number. -1 to exit5 enter a number. -1 to exit2 enter a number. -1 to exit-1 20 sum written to file
この結果、カレントディレクトリにatexit.txtファイルが作成され、合計値(この場合は20)が保存されます。
引数付きで関数を登録する
異なる引数を持つ関数を登録することも可能です。その場合、引数ごとに独立して登録され、やはり登録と逆の順序で実行されます。
import atexit
names = ['Ashok', 'Radha', 'Abdul', 'John']
def hello(name):
print("Hello", name)
for name in names:
atexit.register(hello, name)
実行結果:
C:\python36>python atexit-example2.py Hello John Hello Abdul Hello Radha Hello Ashok
atexit.unregister(hello)を実行すると、さまざまな引数で登録されたhello()のすべてのコピーがリストから一括で削除されます。
デコレータ構文を使った登録方法
関数を登録するもうひとつの便利な方法として、register()をデコレータとして使う書き方があります。コードがすっきりし、意図も明確になります。
import atexit
@atexit.register
def hello():
print('Hello World!')
print('Say Hello')
実行結果:
C:\python36>python atexit-example3.py Say Hello Hello World!
注意点と活用シーン
登録された関数は、プログラムが異常終了した場合やos._exit()関数が呼び出された場合には自動的に実行されないため注意が必要です。
atexitモジュールは、データベース接続やファイルのクローズ、リソースの解放といった終了時のクリーンアップ処理を自動化したい場合に非常に役立ちます。スクリプトの信頼性と保守性を高めるために、ぜひ活用してみてください。
-
Pythonで単利(シンプルインタレスト)を計算する方法をわかりやすく解説
本記事では、Python 3.xを使って単利(シンプルインタレスト)を計算する方法について詳しく解説します。金融計算の基礎となる単利の概念から、実際のコード実装まで、初心者の方にもわかりやすいように順を追って説明していきます。 単利とは? 単利とは、元本に対してのみ利息が発生する計算方式です。複利と異なり、発生した利息が次期の元本に加算されないため、計算式がシンプルなのが特徴です。 単利は「1日あたりの利率 × 元本 × 支払いまでの経過日数」を掛け合わせることで求められます。 単利の計算式 数学的には、以下の公式で表されます。 単利(SI)=(P × T × R)÷ 100 各変数の意味は次
-
Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説
本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体