Core.schedule() デコレーターを使用して、エージェント内で特定の時間にタスクを開始するようにスケジュールするにはどうすればよいですか? Core.schedule(deadline, *args, **kwargs) を使用してみましたが、ここで締切は日時です (つまり、'2016-09-26 10:00:00') が、エラー args is not defined を受け取りました。
1 に答える
通常、スケジュールされたコールバックは 1 回だけ呼び出されるため、スケジュール メソッドはデコレータとして使用されません。(実際にやった事はありません。)
*args と **kwargs は、関数に渡される可変引数のプレースホルダーです。http://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/を参照してください
この場合、スケジュール メソッドは *args と **kwargs を使用して、後で呼び出された関数に渡されるデコレーターに渡された追加の引数を格納します。
たとえば、エージェント メソッド update_state(self, parameter1) があり、update_time という datetime オブジェクトと parameter1 の値の値 42 によって指定された将来のある時点で実行するようにスケジュールしたい場合、次のように実行できます。
self.core.schedule(update_time, self.update_state, 42)
update_time は、Python の datetime オブジェクトまたは UNIX のタイム スタンプである必要があります。
これをデコレータとして使用するには、次のようにします。
Core.schedule(update_time, 42)
def update_state(self, parameter1):
pass
update_time が到着すると、一度呼び出されます。update_state 関数への別の呼び出しをスケジュールする場合は、新しい時間を把握し、update_state 関数からスケジュールする必要があります。