ホームページ  >  記事  >  バックエンド開発  >  Python でのプログラムのスケジュールされた実行の問題を解決する方法はありますか?

Python でのプログラムのスケジュールされた実行の問題を解決する方法はありますか?

王林
王林転載
2023-05-08 22:52:061176ブラウズ

    Python スケジュール実行プログラム (スケジュール)

    スケジュール ライブラリを使用します

    import schedule
    import time
    def job():
        print("I'm working...")
    schedule.every(10).seconds.do(job) # 每10秒执行一次
    schedule.every().wednesday.at("13:15").do(job) # 每周三13点15执行
    schedule.every(10).minutes.do(job) # 每10分钟执行一次
    schedule.every().hour.do(job) # 每小时执行一次
    schedule.every().day.at("10:30").do(job) # 每天十点半执行
    schedule.every(5).to(10).minutes.do(job) # 每5-10分钟随机执行一次
    schedule.every().monday.do(job) # 每周一执行
    schedule.every().minute.at(":17").do(job) # 每分钟的17秒执行一次
    while True:
        schedule.run_pending() # 运行所有可运行的任务

    4:30 に実行したい場合は、単にschedule.every().day.at("4:30")ではなく、schedule.every().day.at("04:30").do(job)

    と記述する必要があります。 do (ジョブ)

    プログラムの実行時間が設定した時間間隔より短い場合、つまり、次にスケジュールされたプログラムの実行が開始されるとき、最後のプログラムがまだ実行されていない場合、新しいプロセスが開始されます。

    プロセスが多すぎると大惨事になります

    Python スケジュールされたタスクの実行 (スケジュール) 時間遅延の落とし穴記録

    スケジュール設定によるタスクの時間指定実行

    import schedule
    import time
    # 定义某个任务
    def job():
        ...
    # 设置执行时间
    schedule.every().seconds.do(job) # 每秒执行一次任务
    schedule.every().minutes.do(job) # 每分钟执行一次任务
    schedule.every().hour.do(job) # 每小时执行一次任务
    # 可以指定具体时间间隔
    schedule.every(10).minutes.do(job) # 每10分钟执行一次任务
    # 设置每天某一时刻执行
    schedule.every().day.at("05:15").do(job) # 每天凌晨5点15分执行任务
    # 设置星期几执行
    schedule.every().monday.at("05:15").do(job) # 每周一凌晨5点15分执行任务
    while True:
        schedule.run_pending() # 运行所有可运行的任务

    落とし穴の問題

    最初に注意すべき点は、サービスを開始するにはプログラムを手動で実行する必要があるということです (この時点でプログラムは一時停止されます)。指定された時間に実行を継続します。

    2 番目の注意点は、これを使用する場合、プログラムの実行時間により、時間遅延の問題が発生するということです。たとえば、コードが 10 分ごとに実行されるように設定されている場合、

    schedule.every(10).minutes.do(job) # 每10分钟执行一次任务

    の結果は

    Python でのプログラムのスケジュールされた実行の問題を解決する方法はありますか?

    になりますが、次の実行時間は 10 分後になります。最後のプログラム実行の終了、そしてプログラムが前回から 10 分後に実行されることを望みます。つまり、正しい時刻は 10:20:21 である必要があります。これが続くと、時間遅延が大きくなります。そしてさらに大きい。

    解決策

    特定の時間を追加するだけです (ここでの設定は 15 秒です):

    schedule.every(10).minutes.at(":15").do(job) # 每10分钟过15s执行程序

    つまり、

    10:00:21サービスを開始します。

    最初の実行は 10:10:15 です。

    2 回目の実行は 10:20:15 です。
    3 回目の実行は 10:30:15 です。

    これにより、プログラムの実行時間によって生じる時間遅延の問題が解決されます。 #########知らせ! ! !

    サービスを初めて開始する場合、正常に実行するには、現在時刻から 15 秒後にプログラムを実行する必要があります。

    たとえば、サービスが 10:00:08 に開始された場合、次回は 10:09:15 に実行されます (例外) たとえば、サービスが開始された場合10:00:21 に実行されると、次回は 10:00:21 に実行されます。 10:10:15 に実行されます (通常)

    以上がPython でのプログラムのスケジュールされた実行の問題を解決する方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。