2

次のようにPythonで繰り返される時限イベントをスケジュールしたいと思います:「時間Xで関数Yを(別のスレッドで)起動し、1時間ごとに繰り返します」

「X」は固定タイムスタンプ

コードはクロスプラットフォームである必要があるため、「cron」などの外部プログラムを使用してこれを行うことは避けたいと思います。

コードの抜粋:

    スレッドのインポート
    threading.Timer(10*60, mail.check_mail).start()
    #...ここで時限イベントを設定します
    ながら (1):
        print("コマンドを入力してください")
        試す:
            コマンド = raw_input()
        を除外する:
            継続する
        handle_command(コマンド)
4

1 に答える 1

2

スケジュール用にを作成してdateutil.rruleからrr、スレッドで次のようなループを使用します。

for ts in rr:
    now = datetime.now()
    if ts < now:
        time.sleep((now - ts).total_seconds())
    # do stuff

または、クロックの変更を考慮したより良いソリューション:

ts = next(rr)
while True:
    now = datetime.now()
    if ts < now:
        time.sleep((now - ts).total_seconds() / 2)
        continue
    # do stuff
    ts = next(rr)
于 2012-05-22T10:53:21.980 に答える