Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【コピペでできるpython】定期的にメソッドを実行してみよう!

python定期的に実行

こんにちは、ゆきぽんずです。

 

平日はインターン、休日はブログ・読書・投資の勉強と何かと忙しくしているゆきぽんずですが、まだ結果が出ていないので毎日努力するのみです。

 

さてさてさーて今日はpythonで定期的にメソッドを実行する方法を紹介します。早速ソースコードをどうぞ!

ソースコード

こちらからダウンロードもできます。

https://github.com/yukiyukiponsu/SchedulerPython

import threading
import time

def count(cnt, sum):
    sum += cnt
    return sum

def scheduler(interval, wait = False):
    base_time = time.time()
    next_time = 0
    sum = 0
    cnt = 0
    while True:
        sum = count(cnt, sum)
        print(sum)
        cnt += 1
        #処理時間を考慮してSleepする時間を決定
        next_time = ((base_time - time.time()) % interval) or interval
        print(next_time)
        time.sleep(next_time)

scheduler(1, False)

少し説明します。今回作成したcount関数は、0+1+2+3+....と無限に整数の足し算が続いていくものとなっており、scheduler関数は実行時間を考慮しながら1秒間隔でcount関数を呼び出すものとなっています。

文字で見てもよくわからないと思うので実行結果をご覧ください。

実行結果

実行結果1

見ていただくとわかるようにしっかり実行できていますね!

 

毎回の実行時間が変わる(PCに入っているOSは計測用のOSではないので、同じコードでも実行時間がたびたび変わる)ので出力しているSleepの時間が変動する理由もわかると思います。

 

コードを見て「あれっ?waitってつかってなくね?」と思った人もいると思います。ではwaitをとって実行してみるとどうなるでしょうか?実行結果を下に貼っておきます。

実行結果2

どこが変わったかわかりますか?実行したすぐ下を見てください。waitを入れて実行した場合だと通常通りに0+1+2+...と足されていますが、waitがない場合だと0, 1, 1, 3..と出力されています。これでは0+1+2+...という関数が正確に実行されていません。つまりwaitが重複した実行をさせないように調整しているのです。

 

外部的には作用してないように見えてもwaitはしっかり機能してくれています。縁の下の力持ちとして働いてくれています。

 

さて、pythonで関数の定期実行が出来るようになったと思います。あとは色々付け加えて遊んでみてください。

 

今日もブログを読んでくださりありがとうございます。

 

それではまた明日!

追記

こちらの記事の最後の方を見ていただければわかるように、現在エンジニアの需要がとても高いです。今のうちにプログラミング技術を身につけておいた方が間違いなくいいです。

www.yukiyukiponsu.work

 少しでも気になった方は、ほんの少し勇気を出してみませんか?以下にプログラミング学習サイトへのリンクを貼っています。よかったらどうぞ!