Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
83
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@Kai-Suzuki

Python Scheduleライブラリでジョブ実行

アジェンダ

  • はじめに
  • ライブラリの紹介
  • 利用例の紹介

はじめに

スクレイピング等でPythonを定期実行させるために利用したライブラリがとても便利だったので紹介します。

ライブラリの紹介

Pythonの定期実行には下記のライブラリを使いました。
Scheduleライブラリ

Python job scheduling for humans.

An in-process scheduler for periodic jobs that uses the builder pattern for configuration. Schedule lets you run Python functions (or any other callable) periodically at pre-determined intervals using a simple, human-friendly syntax.

人のためのPythonジョブスケジューリング

読みやすい構文を使い、Python関数や呼び出し可能オブジェクトを定期実行させることができます、とのこと。

使い方


pip install schedule
import schedule
import time

def job():
    # 定期実行させたい処理
    print('Do Action')

def main():
    # 10分ごと
    schedule.every(10).minutes.do(job)

    # 2時間ごと
    schedule.every(2).hours.do(job)

    # 毎日10時
    schedule.every().day.at("10:00").do(job)

    # 毎週月曜日
    schedule.every().monday.do(job)

    while True:
        schedule.run_pending()
        time.sleep(1)

解説

schedule.every(10).minutes.do(job)

schedule.every で定期実行するためのジョブをライブラリに登録しています。
登録したジョブは実行時間などを管理していますが、次に記載するshedule.run_pendingが呼び出されるまで、ジョブは実行されません。

while True:
    schedule.run_pending()
    time.sleep(1)

登録したジョブを実行させるための処理です。
schedule.run_pendingは登録したジョブを実行しますが、1回の呼び出しでは1回のジョブしか実行されません。
例えば、毎秒1回のジョブschedule.every(1).second().do(xx)を用意したとしてもschedule.run_pending()を1分に1回しか呼び出さない場合、そのジョブは1分間に1回しか動作しません。

上記のコードは無限ループでschedule.run_pending()を呼び出すようにしています。

  
schedule.every().day.at("10:00").do(job)のような時間指定でジョブを実行させるコードは実行環境の時刻でジョブを開始します。タイムゾーン変換機能はないらしいのでご注意ください。

まとめ

Pythonを定期的に動かすのにバッチを作ってタスクスケジューラに登録するしかないかなぁ、と思っていたのですが、Pythonで楽に書けるライブラリがあったので使ってみました。
手軽にジョブを設定できるので、かなり楽にシステムを動かすことが出来ました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
83
Help us understand the problem. What are the problem?