"sched" — イベントスケジューラ
******************************

**ソースコード:** Lib/sched.py

======================================================================

"sched" モジュールは一般的な目的のためのイベントスケジューラを実装する
クラスを定義します:

class sched.scheduler(timefunc, delayfunc)

   The "scheduler" class defines a generic interface to scheduling
   events. It needs two functions to actually deal with the 「outside
   world」 — *timefunc* should be callable without arguments, and
   return  a number (the 「time」, in any units whatsoever).  The
   *delayfunc* function should be callable with one argument,
   compatible with the output of *timefunc*, and should delay that
   many time units. *delayfunc* will also be called with the argument
   "0" after each event is run to allow other threads an opportunity
   to run in multi-threaded applications.

以下はプログラム例です:

   >>> 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

In multi-threaded environments, the "scheduler" class has limitations
with respect to thread-safety, inability to insert a new task before
the one currently pending in a running scheduler, and holding up the
main thread until the event queue is empty.  Instead, the preferred
approach is to use the "threading.Timer" class instead.

以下はプログラム例です:

   >>> 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


スケジューラオブジェクト
========================

"scheduler" インスタンスは以下のメソッドと属性を持っています:

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

   Schedule a new event. The *time* argument should be a numeric type
   compatible with the return value of the *timefunc* function passed
   to the constructor. Events scheduled for the same *time* will be
   executed in the order of their *priority*. A lower number
   represents a higher priority.

   Executing the event means executing "action(*argument)".
   *argument* must be a sequence holding the parameters for *action*.

   戻り値は、後にイベントをキャンセルする時に使われる可能性のあるイベ
   ントです ("cancel()" を参照)。

scheduler.enter(delay, priority, action, argument)

   時間単位以上の *delay* でイベントをスケジュールします。相対的時間以
   外の、引数、効果、戻り値は、 "enterabs()" に対するものと同じです。

scheduler.cancel(event)

   キューからイベントを消去します。もし *event* がキューにある現在のイ
   ベントでないならば、このメソッドは "ValueError" を送出します。

scheduler.empty()

   もしイベントキューが空ならば、Trueを返します。

scheduler.run()

   Run all scheduled events. This function will wait  (using the
   "delayfunc()" function passed to the constructor) for the next
   event, then execute it and so on until there are no more scheduled
   events.

   *action* あるいは *delayfunc* は例外を投げることができます。いずれ
   の場合も、スケジューラは一貫した状態を維持し、例外を伝播するでしょ
   う。例外が *action* によって投げられる場合、イベントは "run()" への
   呼出しを未来に行なわないでしょう。

   イベントのシーケンスが、次イベントの前に、利用可能時間より実行時間
   が長いと、スケジューラは単に遅れることになるでしょう。イベントが落
   ちることはありません; 呼出しコードはもはや適切でないキャンセルイベ
   ントに対して責任があります。

scheduler.queue

   Read-only attribute returning a list of upcoming events in the
   order they will be run.  Each event is shown as a *named tuple*
   with the following fields:  time, priority, action, argument.

   バージョン 2.6 で追加.
