Pythonのschedモジュールの使い方、インストールのやり方を解説する

スポンサーリンク

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 のオブジェクトとして作成されます。

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文の区別を示すために、いくつかの引数が追加されていることにお気づきでしょうか。

1.3 その他の機能

cancel, empty, queue 関数は、この例では必ずしも検討していない関数です。

  • キャンセル関数は、特に提供されたイベントをキューから削除するために使用されます。
  • empty 関数は、キューの状態や、キューが空かどうかをブール値で返すために使用されます。
  • キュー関数は、利用可能なイベントやこれから実行されるイベントのリストを、実行される順番に提供します。各イベントは、そのイベントの詳細からなる名前付きタプルです。

まとめ

このように、Pythonが提供するこの標準モジュールは、非常に多くのことを明らかにし、あなたのコードの追加やフレームとして、より多くの良い機能に取り組むのを助ける可能性があります。

将来このモジュールを使いたいと思ったとき、コードを書きながらこの記事を参照することをためらわないでください。

ドキュメントに目を通すのは大変な作業です。

だからこそ、私たちはユーザーフレンドリーな記事でドキュメントをナビゲートできるようにしました。

他の記事で、datetime、dateutil、psutil、そして私たちのお気に入りのデータサイエンスツールであるpandasを取り上げましたので、チェックしてみてください。

参考文献

  • スケジュール公式ドキュメント
  • Python のスレッド処理
  • Python と時間
タイトルとURLをコピーしました