lisz-works

技術と興味の集合体

Python3を簡単スケジューリング!「schedule」の試行と解説

【スポンサーリンク】

title

Python3を簡単スケジューリング!「schedule」の試行と解説

[url] python3-schedule [overview] Python3のロジックを、簡単にスケジュール実行したくありませんか?

「schedule」というライブラリで簡単にスケジューリングできます!

今回はコレを試行&解説してみました!

[mini tilte] Python3を簡単スケジューリング!「schedule」の試行と解説


Pythonロゴ

Python3のロジックを、簡単にスケジュール実行したくありませんか?

schedule」というライブラリで簡単にスケジューリングできます!

今回はコレを試行&解説してみました!

インストール

pipでインストールできます。

pip install schedule

サンプルソース

こんな感じで作ってみました!

# -*- coding: utf-8 -*-
import schedule
import time

def printTime(msg):
    print(msg + time.ctime())

def job1():
    printTime("job1  ")

def job2():
    printTime("job2  ")

def job3():
    printTime("job3  ")

def job4():
    printTime("job4  ")

def job5():
    printTime("job5  ")

# 5分間隔
schedule.every(5).minutes.do(job1)
# 毎時
schedule.every().hour.do(job2)
# 時刻指定
schedule.every().day.at("23:01").do(job3)
# 木曜日
schedule.every().thursday.do(job4)
# 木曜日の00:01
schedule.every().thursday.at("00:01").do(job5)

# 実行ループ
printTime("Start ")
while True:
    schedule.run_pending()
    time.sleep(1)

実行結果

こんな感じで実行されました!

Start Wed Aug  1 22:58:08 2018
job3  Wed Aug  1 23:01:00 2018
job1  Wed Aug  1 23:03:08 2018
job1  Wed Aug  1 23:08:08 2018
job1  Wed Aug  1 23:13:08 2018
job1  Wed Aug  1 23:18:08 2018
job1  Wed Aug  1 23:23:09 2018
job1  Wed Aug  1 23:28:09 2018
job1  Wed Aug  1 23:33:09 2018
job1  Wed Aug  1 23:38:09 2018
job1  Wed Aug  1 23:43:09 2018
job1  Wed Aug  1 23:48:09 2018
job1  Wed Aug  1 23:53:10 2018
job2  Wed Aug  1 23:58:09 2018
job1  Wed Aug  1 23:58:10 2018
job5  Thu Aug  2 00:01:00 2018
job1  Thu Aug  2 00:03:10 2018
job1  Thu Aug  2 00:08:10 2018

なんかjob4(木曜日に実行)がうまく動かなかった……

job5の影響でしょうかね……

処理の流れ

「schedule.every()」で始まるものがスケジュールの登録処理になります。

今回のサンプルは

  1. 「分」間隔
  2. 「時間」間隔
  3. 時刻指定
  4. 曜日指定
  5. 曜日と時刻指定

を設定し、それぞれの現在時刻を出力させました。

スケジュール登録後、「実行ループ」の部分に行きます。

そこで

  1. スケジュール待ち
  2. 1秒待機

無限ループします。

実行ループは、公式のサンプルが、このように作ってるので問題ないかと!

https://schedule.readthedocs.io/en/stable/#usage

スケジュール登録について

「schedule.every()」の箇所に書かれている箇所のようにして、スケジュール登録をします。

everyの引数

everyの引数は、インターバル時間です。

指定しなければ「1」となります。

every.「XXX」

「schedule.every().」に続くものは、これらが使用できます。

  1. second
  2. seconds
  3. minute
  4. minutes
  5. hour
  6. hours
  7. day
  8. days
  9. week
  10. weeks
  11. monday
  12. tuesday
  13. wednesday
  14. thursday
  15. friday
  16. saturday
  17. sunday

時分秒、日、週、曜日が指定できるようですね。

その他ロジック解説

それでは各ロジックの詳細を見ていきましょう!

import

importは

  1. import schedule
  2. import time

の2つはマストで行います。

scheduleは言わずもがな、今回のメインである機能を使うため。

そしてtimeは、実行ループに使用します。

ループのスリープ用です。

printTime()

「引数のメッセージ + 現在時刻」を出力するだけの処理。

jobX()

各スケジュール処理が実行されたらコールする関数です。

今回はそれぞれのスケジューラで、別々の出力がされることが確認したかったので、関数を分けました!

もちろん同じ関数をコールでもOK!

参考

これらのページを参考にしました。
ありがとうございます!

https://tadaken3.hatenablog.jp/entry/python-schedule

https://schedule.readthedocs.io/en/stable/