12,12:30,1,1:30に実行されるcronジョブがあります。だから時計の半時間間隔ごとに。私はcronジョブが実行されるたびに私のPythonコードでスレッドを実行したい。Pythonのcronジョブと同期するクロック時間のスレッドタイマーを設定できますか?
私は30分ごとにタイマーを設定した場合、例えばx15秒ごとにタイマーを設定すると、x15秒ごとにタイマーを実行する例を見たことがあります。 1:45 pm。私は午後1時30分に実行するスレッドにしたい。それは可能ですか?
12,12:30,1,1:30に実行されるcronジョブがあります。だから時計の半時間間隔ごとに。私はcronジョブが実行されるたびに私のPythonコードでスレッドを実行したい。Pythonのcronジョブと同期するクロック時間のスレッドタイマーを設定できますか?
私は30分ごとにタイマーを設定した場合、例えばx15秒ごとにタイマーを設定すると、x15秒ごとにタイマーを実行する例を見たことがあります。 1:45 pm。私は午後1時30分に実行するスレッドにしたい。それは可能ですか?
ほとんどすべてが可能ですが、本当の疑問はなぜこれをしたいのですか? cronスケジューラは必ずしも正確な時刻にジョブを実行する必要はなく、さらにPythonの時刻をチェックすることはcronの時刻に必ずしも対応しないため、の後にPythonコードで何かを実行する必要がある場合cronジョブはあなたは実際にあなたのcronジョブからあなたのPythonスクリプト(データグラムソケットを使うのが最も簡単でしょう)と '通信'する必要があります。
しかし、あなたはPythonでcronスケジューラーをシミュレートしたいこれを行う方法の1つは、datetime
モジュールを使用して現在の時刻を取得し、コマンドが再起動する前に必要な数量を計算することです。
def schedule_hourly_task(task, minute=0):
# get hourly offset in seconds in range 1-3600
period = ((60 + minute) % 60) * 60 or 3600
while True:
# get current time
current = datetime.datetime.now()
# count number of seconds in the current hour
offset = (current - current.replace(minute=0, second=0, microsecond=0)).total_seconds()
# calculate number of seconds til next period
sleep = period - offset % period
if offset + sleep > 3600: # ensure sleep times apply to full hours only
sleep += 3600 % period
# sleep until the next period
time.sleep(sleep)
# run the task, break the loop and exit the scheduler if `False` is returned
if not task():
return
次に、それを使用して任意のタスクを任意のfull_hour + minute
オフセットで実行することができます。たとえば、次のように
counter = 0
def your_task():
global counter
counter += 1
if counter > 2:
return False
return True
schedule_hourly_task(your_task, 15)
そして、それはyour_task()
戻りFalse
まで15分ごとにyour_task()
機能を実行します - 終了する前にhh:15
、hh:30
とhh:45
で、この場合にはあなたのケースでは、schedule_hourly_task(your_task, 30)
に電話すると、your_task()
が30分ごとにyour_task()
関数を呼び出し、True
を返します。