8.8. sched —イベントスケジューラ—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/sched
移動先:案内検索

8.8。 スケジュール —イベントスケジューラ

ソースコード: :source: `Lib / sched.py`



sched モジュールは、汎用イベントスケジューラを実装するクラスを定義します。

class sched.scheduler(timefunc, delayfunc)
scheduler クラスは、イベントをスケジューリングするための汎用インターフェイスを定義します。 「外の世界」を実際に処理するには、2つの関数が必要です。 timefunc は引数なしで呼び出し可能であり、数値(任意の単位での「時間」)を返す必要があります。 delayfunc 関数は、 timefunc の出力と互換性があり、1つの引数で呼び出すことができ、その数の時間単位を遅延させる必要があります。 delayfunc は、各イベントの実行後に引数0を指定して呼び出され、他のスレッドがマルチスレッドアプリケーションで実行できるようにします。

例:

>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(): print "From print_time", time.time()
...
>>> def print_some_times():
...     print time.time()
...     s.enter(5, 1, print_time, ())
...     s.enter(10, 1, print_time, ())
...     s.run()
...     print time.time()
...
>>> print_some_times()
930343690.257
From print_time 930343695.274
From print_time 930343700.273
930343700.276

マルチスレッド環境では、 Scheduler クラスには、スレッドセーフ、実行中のスケジューラで現在保留中のタスクの前に新しいタスクを挿入できないこと、およびイベントキューまでメインスレッドを保持することに関して制限があります。空です。 代わりに、推奨されるアプローチは、代わりに threading.Timer クラスを使用することです。

例:

>>> import time
>>> from threading import Timer
>>> def print_time():
...     print "From print_time", time.time()
...
>>> def print_some_times():
...     print time.time()
...     Timer(5, print_time, ()).start()
...     Timer(10, print_time, ()).start()
...     time.sleep(11)  # sleep while time-delay events execute
...     print time.time()
...
>>> print_some_times()
930343690.257
From print_time 930343695.274
From print_time 930343700.273
930343701.301

8.8.1。 スケジューラオブジェクト

scheduler インスタンスには、次のメソッドと属性があります。

scheduler.enterabs(time, priority, action, argument)

新しいイベントをスケジュールします。 time 引数は、コンストラクターに渡される timefunc 関数の戻り値と互換性のある数値型である必要があります。 同じ時間にスケジュールされたイベントは、優先度の順序で実行されます。 数値が小さいほど、優先度が高くなります。

イベントの実行とは、action(*argument)の実行を意味します。 引数は、アクションのパラメーターを保持するシーケンスである必要があります。

戻り値は、後でイベントをキャンセルするために使用できるイベントです( cancel()を参照)。

scheduler.enter(delay, priority, action, argument)
遅延より多くの時間単位のイベントをスケジュールします。 相対時間以外の引数、効果、戻り値は enterabs()と同じです。
scheduler.cancel(event)
キューからイベントを削除します。 event が現在キューにあるイベントでない場合、このメソッドはValueErrorを発生させます。
scheduler.empty()
イベントキューが空の場合はtrueを返します。
scheduler.run()

スケジュールされたすべてのイベントを実行します。 この関数は、(コンストラクターに渡されるdelayfunc()関数を使用して)次のイベントを待機し、スケジュールされたイベントがなくなるまでそれを実行します。

action または delayfunc のいずれかで例外が発生する可能性があります。 いずれの場合も、スケジューラーは一貫した状態を維持し、例外を伝播します。 action によって例外が発生した場合、 run()の今後の呼び出しではイベントは試行されません。

一連のイベントの実行に次のイベントまでの時間よりも時間がかかる場合、スケジューラーは単に遅れます。 イベントは削除されません。 呼び出し元のコードは、関係がなくなったイベントをキャンセルする責任があります。

scheduler.queue

実行される順序で今後のイベントのリストを返す読み取り専用属性。 各イベントは、名前付きタプルとして表示され、次のフィールドがあります:時間、優先度、アクション、引数。

バージョン2.6の新機能。