私はあなたの必要条件を満たしていれば、ループが実行されるたびに待ち行列にタスクを再入力するループが必要です。
# This code assumes you have created a function called "func"
# that returns the time at which the next execution should happen.
s = sched.scheduler(time.time, time.sleep)
while True:
if not s.queue(): # Return True if there are no events scheduled
time_next_run = func()
s.enterabs(time_next_run, 1, <task_to_schedule_here>, <args_for_the_task>)
else:
time.sleep(1800) # Minimum interval between task executions
ただし、スケジューラを使用するのは - IMO - overkillingです。たとえば、基本的な実装は次のようになります。
from datetime import datetime as dt
while True:
if dt.now().hour in range(start, stop): #start, stop are integers (eg: 6, 9)
# call to your scheduled task goes here
time.sleep(60) # Minimum interval between task executions
else:
time.sleep(10) # The else clause is not necessary but would prevent the program to keep the CPU busy.
HTH!
出典
2011-12-06 14:37:56
mac
あなたはちょうど私の一日を作りました、私はバックアップとして最初のものを保つ(私の上司が他の計画を持っている場合に) – HTDutchy
@ s4uadmin - それはあなたにとって有益でした。私のことは** start = 23、stop = 01のようなものを入力して分を考慮しないと失敗するという、非常に基本的な**実装です。しかし、 'if x in range'を関数' func(x) 'で置き換えることで、それを改善するのは自明です。あなたの必要に応じて' True'または 'False'を返します。 :) – mac