Pythonのタイマーオブジェクト(threading.Timer)の使い方を徹底解説
タイマーオブジェクトは、一定の時間間隔に基づいて特定のアクションを実行したい場合に役立つ機能です。Pythonでは、threadingモジュールが提供するTimerクラスを使うことで、指定した時間が経過した後に処理を実行するスレッドを簡単に生成できます。TimerクラスはThreadクラスのサブクラスであり、start()メソッドを呼び出すことでタイマーが起動します。
タイマーオブジェクトの作成方法
タイマーオブジェクトを作成するには、以下の構文を使用します。
threading.Timer(interval, function, args=None, kwargs=None)
- interval:処理を実行するまでの待機時間(秒数)
- function:時間経過後に実行される関数
- args:関数に渡す位置引数(タプル形式、デフォルトはNone)
- kwargs:関数に渡すキーワード引数(辞書形式、デフォルトはNone)
基本的な使用例
次の例では、プログラムの開始時にまず「Bye」が出力され、その3秒後に「Python Program」が表示されます。
サンプルコード
import threading
def mytimer():
print("Python Program\n")
my_timer = threading.Timer(3.0, mytimer)
my_timer.start()
print("Bye\n")
実行結果
Bye Python Program
このように、メインスレッドはそのまま処理を続行し、指定した時間が経過すると別スレッド上で関数が実行されます。タイマーは一度きりの実行ですが、関数内で再度新しいタイマーを生成してstart()を呼び出せば、定期的な繰り返し処理も実現できます。
タイマーのキャンセル方法
まだ実行されていないタイマーを中止したい場合は、cancel()メソッドを使用します。構文は以下の通りです。
timer.cancel()
start()を呼び出した後でも、設定した時間が経過する前であれば、このメソッドによって関数の実行を取り消すことができます。
サンプルコード
import threading
def mytimer():
print("Python Program\n")
my_timer = threading.Timer(3.0, mytimer)
my_timer.start()
print("Cancelling timer\n")
my_timer.cancel()
print("Bye\n")
実行結果
Cancelling timer Bye
この例では、タイマーが発火する前にcancel()が呼び出されたため、「Python Program」は表示されずにプログラムが終了します。
まとめ
Pythonのthreading.Timerクラスを使えば、指定時間後に処理を実行するスレッドを手軽に作成できます。遅延実行が必要な処理や、一定時間後に何かを実行したいケースで非常に便利です。さらに、cancel()メソッドによって実行前のタイマーを柔軟に取り消せる点も押さえておくとよいでしょう。
-
Pythonのファイルオブジェクトとは?open関数によるファイル操作の基本を徹底解説
Pythonでは、ファイルを読み書きする際に特別なライブラリをインポートする必要はありません。ファイル操作は言語にネイティブに組み込まれているためです。 まず最初に行うのは、組み込み関数 open() を使ってファイルオブジェクトを取得することです。open() 関数はファイルを開き、ファイルオブジェクトを返します。このファイルオブジェクトには、開いたファイルから情報を取得したり、内容を操作したりするためのメソッドや属性が含まれています。 ファイルとは何か? ファイル操作を行う前に、「ファイルとは何か」を理解しておきましょう。ファイルとは、関連する情報を保存するためにディスク上に確保された「名
-
PythonとBoto3を使ってS3オブジェクトをダウンロードする方法
この記事では、PythonとBoto3ライブラリを使用して、AWS S3バケットからファイルや画像をダウンロードする具体的な方法をコード例とともに解説します。 Boto3はAWS公式のPython用SDK(ソフトウェア開発キット)です。EC2やS3バケットといったAWSサービスと簡単に連携できる使いやすい関数群を提供しており、PythonでのAWS操作の定番ライブラリとなっています。 PythonとBoto3でS3オブジェクトをダウンロードする基本 まずは、指定したS3バケットから1つのファイルをダウンロードする基本的な例を見てみましょう。 S3を操作するには、boto3.client(s3)