triggon 新機能 遅延予約を再設定する

【個人ブログ】開発過程と学習記録

投稿日:

set_trigger() や revert()after 引数で設定秒数後にラベルを有効・無効化することができます。
次回アップデートで追加される reschedule 引数を使うことで、既存の遅延秒数を再設定できるようになります!

今までの遅延仕様

今までは対象ラベルがすでに遅延中の場合は、遅延秒数を再設定しても無視される仕様になっていました。

tg = Triggon.from_label("A", new_values=True) # ラベルとその更新値を登録

tg.set_trigger("A", after=0.5) # ラベル'A'を0.5秒後に有効化
tg.set_trigger("A", after=1) # すでに遅延中のため適用されない

sleep(0.6)
a = tg.switch_lit("A", original_val=False) # ラベル'A'が有効の場合に更新値に切り替わる
print(a) # True

reschedule で遅延秒数を上書きする

新オプションの reschedule 引数では True(デフォルトは False)に設定することで既存の遅延秒数を上書きすることができます!

def func():
    a = tg.switch_lit("A", original_val=False)
    b = tg.switch_lit("B", original_val=0)
    return a, b

tg = Triggon.from_labels({"A": True, "B": 100}) # ラベルとその更新値を登録

tg.set_trigger(all=True, after=0.5) # 全ラベルを0.5秒後に有効化
tg.set_trigger(all=True, after=1, reschedule=True) # 全ラベルを1秒後に有効化するよう再設定

sleep(0.6)
a, b = func() 
print(a, b) # False 0

sleep(0.5)
a, b = func()
print(a, b) # True 100

全ラベルを遅延設定した後に、特定のラベルだけの遅延秒数を上書きすることもできます。

def func():
    a = tg.switch_lit("A", original_val=False)
    b = tg.switch_lit("B", original_val=0)
    return a, b

tg = Triggon.from_labels({"A": True, "B": 100}) # ラベルとその更新値を登録

tg.set_trigger(all=True, after=0.5) # 全ラベルを0.5秒後に有効化
tg.set_trigger("A", after=0, reschedule=True) # ラベル'A'を即時有効化するように再設定

a, b = func() 
print(a, b) # True 0

sleep(0.6)
a, b = func()
print(a, b) # True 100

この遅延上書き機能はあったら便利だなと思って実装したのですが、実装難易度は遅延クラス並みに高く、特に予約状態の管理や優先順位設計が難しかったです。
そして、別の新機能も実装したので次の記事で紹介します!

コメント

タイトルとURLをコピーしました