ホームページ  >  記事  >  バックエンド開発  >  Python標準ライブラリのschedモジュールの紹介

Python標準ライブラリのschedモジュールの紹介

零下一度
零下一度オリジナル
2017-07-20 18:06:391929ブラウズ

イベントスケジュール

sched モジュールの内容は非常に単純で、クラスを 1 つだけ定義しています。これは、一般的なイベント スケジューリング モジュールとして使用されます。 sched模块内容很简单,只定义了一个类。它用来最为一个通用的事件调度模块。

  class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接口,它需要外部传入两个参数,timefunc是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time),delayfunc应该是一个需要一个参数来调用、与timefunc的输出兼容、并且作用为延迟多个时间单位的函数(常用的如time模块的sleep)。

  下面是一个列子:

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, ()) 
# 加入调度事件# 四个参数分别是:# 间隔事件(具体值决定与delayfunc, 这里为秒);# 优先级(两个事件在同一时间到达的情况);# 触发的函数;# 函数参数;s.enter(10, 1, print_time, ())# 运行s.run()print time.time()if __name__ == '__main__':
print_some_times()

  看到的输出结果,隔5秒中执行第一个事件,隔10秒后执行第二个事件:

1499259731.99From print_time 1499259736.99From print_time 1499259741.991499259741.99

  在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用threading.Timer类代替:

import timefrom threading import Timerdef 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) # 阻塞主线程,等待调度程序执行完毕,再执行后面内容print time.time()if __name__ == '__main__':
print_some_times()

Scheduler对象方法

  scheduler对象拥有下面这些方法或属性:

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

  加入一个事件,time参数应该是一个与传递给构造函数的timefunc函数的返回值相兼容的数值类型。在同一时间到达的事件将按照priority顺序执行。

  执行事件其实就是执行action(argument)。argument必须是一个包含action参数的序列。

  返回值是一个事件,它可以用于稍后取消事件(请参见cancel()

クラス sched.scheduler(timefunc,layfunc)このクラスは、外部入力を必要とするイベントをスケジュールするための一般的なインターフェイスを定義します。パラメータ、layfunc は、timefunc の出力と互換性のある 1 つのパラメーターで呼び出す必要があり、複数の時間単位を遅延させる関数 (一般的に使用されます)タイムモジュールのスリープとして)。 🎜🎜 以下は例です:🎜rrreee🎜 表示される出力は、最初のイベントが5秒ごとに実行され、2番目のイベントが10秒ごとに実行されることです:🎜rrreee🎜 マルチスレッドのシナリオでは、スレッドが存在します。安全性の問題がある場合、run() 関数はメインスレッドをブロックします。公式の推奨事項は、 threading.Timer クラス: 🎜rrreee🎜Scheduler オブジェクトのメソッド🎜🎜メソッドまたはプロパティ: 🎜
  • scheduler.enterabs(time, priority, action, argument )🎜 li>

🎜 イベントを追加します、time パラメータは と同じである必要があります。 = コンストラクターに渡されます "font-size: 0.85em; font-family: Consolas、Inconsolata、Courier、monospace; margin: 0px 0.15em; padding: 0px 0.3em; White-space: pre-wrap; border: 1px Solid # eaeaea;background-color:#f8f8f8;border-radius:3px;display:inline;">timefunc 関数の戻り値と互換性のある数値型。同時に到着するイベントは、それに応じてサイズが変更されます。 🎜🎜 実行イベントは実際には実行アクション(引数)。引数は、アクション パラメータのシーケンス。 🎜🎜 戻り値はイベントであり、後でイベントをキャンセルするために使用できます(enterabs は、delay个时间单位。除了时间外,其他参数、含义和返回值与enterabs()的值相同。其实内部enterabs就是用来被enter调用。

  • scheduler.cancel(event)

  从队列中删除事件。如果事件不是当前队列中的事件,则该方法将跑出一个ValueError

  • scheduler.empty()

  判断队列是否为空。

  • scheduler.run()

  运行所有预定的事件。这个函数将等待(使用传递给构造函数的delayfunc()函数),然后执行事件,直到不再有预定的事件。

  任何actiondelayfunc都可以引发异常。在这两种情况下,调度器将保持一个一致的状态并传播异常。如果一个异常是由action引起的,就不会再继续执行run()

  • scheduler.cancel(event)

    🎜🎜 キューからイベントを削除します。イベントが現在のキュー内のイベントではない場合、このメソッドは em; を実行します。 inline;">ValueError
。 🎜🎜🎜🎜scheduler.empty()🎜🎜🎜🎜 キューが空かどうかを判定します。 🎜🎜🎜🎜scheduler.run()🎜🎜🎜🎜 スケジュールされたイベントをすべて実行します。この関数は待機します (layfunc() 関数) がなくなるまでイベントを実行します。さらに予約イベント。 🎜🎜 任意のアクション または run()。 🎜🎜🎜🎜scheduler.queue🎜

読み取り専用属性で、今後のイベントのリスト(到着イベント順に並べ替え)を返します。各イベントにはtimepriorityactionargument组成的namedtupleが付いています。

以上がPython標準ライブラリのschedモジュールの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。