1. ホーム
  2. python

[解決済み] 毎日同じ時間に何かをするPythonスクリプト [重複] (英語)

2022-10-11 05:01:39

質問

長時間稼働するPythonスクリプトがあり、毎朝01:00に何かを実行したいのですが、どうすればよいでしょうか?

私はこれまで スケジュー モジュールと タイマー オブジェクトを使用しますが、これらを使用してこれを実現する方法がわかりません。

どのように解決するのですか?

このようにすればよいのです。

from datetime import datetime
from threading import Timer

x=datetime.today()
y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0)
delta_t=y-x

secs=delta_t.seconds+1

def hello_world():
    print "hello world"
    #...

t = Timer(secs, hello_world)
t.start()

これは翌日の午前1時に関数(例:hello_world)を実行します。

EDITです。

PaulMag さんの提案にあるように、より一般的には、月末に達したために月日をリセットする必要があるかどうかを検出するために、この文脈での y の定義は次のようにすること。

y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)

この修正により、importにtimedeltaを追加することも必要です。他のコード行は同じものを維持します。したがって、total_seconds()関数も使用した完全な解決策は、次のとおりです。

from datetime import datetime, timedelta
from threading import Timer

x=datetime.today()
y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
delta_t=y-x

secs=delta_t.total_seconds()

def hello_world():
    print "hello world"
    #...

t = Timer(secs, hello_world)
t.start()