Pythonのschedモジュールについて説明します。
Pythonの datetime
モジュールを使っているうちに、Pythonにあったらいいな、使えたらいいなという機能、つまりスケジューリングに出会ったことがあるのではないでしょうか。
イベントスケジューリングは、時間や日付の入力に基づいたイベントの警告や実行に使用できる、目的を持ったスケジューリングタスクです。
スケジューリングは過去にも考えられていました。
そのため、現在では sched
モジュールがあり、すぐに使用することができます。
この記事では、このモジュールの様々な使い方やユースケースを探りますが、簡単のために time
モジュールを使って作業することにします。
もし、あなた自身のバージョンの sched
モジュールを使っていて何か混乱することがあったら、datetime モジュールを使って datetime オブジェクトについて簡単に復習する記事を読むとよいかもしれません。
Pythonでのschedモジュールのインストール
驚くかもしれませんが、このモジュールはPythonの標準ライブラリにデフォルトで表示されるので、インストールやパッケージマネージャは必要ありません。
ドキュメントにもあります。
引数やキーワードについてより明確に理解するためにドキュメントをご覧になりたい場合は、この記事の一番下にあるリファレンスの中にリンクがあります。
sched モジュールの使用方法
sched モジュールを使うための前提条件として、datetime/time オブジェクトの基本的な理解が必要です。
もし、事前に datetime
モジュールや time
モジュールを使っていたなら、 sched
モジュールが datetime の拡張モジュールとして動作することを知っていると嬉しいかもしれません、別のモジュールである dateutil と同じようなものです。
1.0 スケジューラ – sched モジュールのインポート
sched` モジュールは、全体としてたった一つのクラスから構成されています。
さて、これは私たちにとってどういう意味があるのでしょうか?
つまり、クラスは一つしかないので、スケジューラ・クラスのすべての機能を利用できるオブジェクトを一つ作るだけです。
このクラスは scheduler
として知られています。
すぐにでも始められますが、始める前にまず、このモジュールをインポートして、このモジュールと一緒に作業することにしましょう。
import sched, time
|
1.1 スケジューラオブジェクトの作成方法
スケジューラオブジェクトの作成はとても簡単で、sched
モジュールをインポートした後、それを使うために必要なのは本当に一行だけです。
# Intializing s as the scheduler object s = sched.scheduler(time.time, time.sleep)
|
この一行で time
モジュールの時間を扱う機能が提供され、さらに遅延も提供され、マルチスレッド操作がサポートされます。
これは本質的に変数 s
を作成し、sched モジュールのクラス scheduler
のオブジェクトとして作成されます。
この記事もチェック:Pythonのtimeモジュールを使って時間の計測や変換を行う方法
1.2 スケジューラオブジェクトの操作
ここでは、多くの時間オブジェクトをプリントアウトしたり、操作が行われた時間そのものを表示したりするために提供されている機能を使用します。
この小さなスニペットでは、sched
モジュールの核心部分であるイベントの作成と入力を行っています。
スレッドを扱うときと同じように、sched
モジュールではrunメソッドを使用して、実行するようにスケジュールされたすべてのタスクを実行します。
# Creating a method to print time def print_time(a = "default" ):
print ( "From print_time" , time.time(), a)
# Method to print a few times pre-decided def print_some_times():
print ( "This is the current time : " , time.time())
# default command to print time
s.enter( 10 , 1 , print_time)
# passing an argument to be printed after the time
s.enter( 10 , 1 , print_time, argument = ( 'positional' ,))
# passing a keyword argument to print after the time
s.enter( 10 , 1 , print_time, kwargs = { 'a' : 'keyword' })
# runs the scheduler object
s.run()
print ( "Time at which the program comes to an end: " , time.time())
# Output # This is the current time : 1609002547.484134 # From print_time 1609002557.4923606 default # From print_time 1609002557.4923606 positional # From print_time 1609002557.4923606 keyword # Time at which the program comes to an end : 1609002557.4923606 |
注意しなければならないのは、スケジューラオブジェクトで使われている run
メソッドでしょう。
これはスケジュールされたイベントをすべて実行する関数で、delayfunc パラメータで指定された時間だけ待機します。
これは、start、run、wait、notifyといったコンセプトで、並行処理やマルチスレッドのコンセプトをより深く掘り下げており、興味があればとても楽しく読むことができます。
また、print文の区別を示すために、いくつかの引数が追加されていることにお気づきでしょうか。
この記事もチェック:Pythonでtime.sleepメソッドを使って一定時間だけ待機状態にする方法
1.3 その他の機能
cancel, empty, queue 関数は、この例では必ずしも検討していない関数です。
- キャンセル関数は、特に提供されたイベントをキューから削除するために使用されます。
- empty 関数は、キューの状態や、キューが空かどうかをブール値で返すために使用されます。
- キュー関数は、利用可能なイベントやこれから実行されるイベントのリストを、実行される順番に提供します。各イベントは、そのイベントの詳細からなる名前付きタプルです。
まとめ
このように、Pythonが提供するこの標準モジュールは、非常に多くのことを明らかにし、あなたのコードの追加やフレームとして、より多くの良い機能に取り組むのを助ける可能性があります。
将来このモジュールを使いたいと思ったとき、コードを書きながらこの記事を参照することをためらわないでください。
ドキュメントに目を通すのは大変な作業です。
だからこそ、私たちはユーザーフレンドリーな記事でドキュメントをナビゲートできるようにしました。
他の記事で、datetime、dateutil、psutil、そして私たちのお気に入りのデータサイエンスツールであるpandasを取り上げましたので、チェックしてみてください。
参考文献
- スケジュール公式ドキュメント
- Python のスレッド処理
- Python と時間