質問: Pythonで15分毎にwifiの速度テストをするプログラムを作っています。 一定時間毎での関数の実行にScheduleというライブラリを使用しています。 最初は ``` schedule.every(15).minutes.do(job) ``` というようにコーディングしました。 この方法だと関数の処理が終わってから15分後にまた関数が実行されます。 関数の処理には25s程かかります。 僕は関数を実行開始した時刻の差を15分にしたいです。 そこで、関数を実行する時刻を指定するようにコーディングしてみました。 ``` schedule.every().minute.at(":00").do(job) schedule.every().minute.at(":15").do(job) schedule.every().minute.at(":30").do(job) schedule.every().minute.at(":45").do(job) ``` しかしこの方法だと、何故か15s毎に関数が実行されます。 そもそもの記述方法が違うのでしょうか? 何かわかる方がいましたら、教えてください。
回答: YouheiSakuraiさんの回答とは別の方法をコメントしてみます。 質問者さんのケースでは15分ごとにたかだか25秒程度のjobを実行するということなのでatを使ってもよい気がします。しかし > > そもそもの記述方法が違うのでしょうか? > > > そのようです。 `schedule.every().minute.at(":00").do(job)` (B) は「毎分ごとに00秒時点で~する」という意味です。 時分秒を表すとき`hh:mm:ss`と表現しますよね?なぜ`at(":xx")`と指定するかといえばこの時分秒のうち一番右側のフィールドであるssを表現しているからと解釈すべきでしょう。 `schedule.every().hour.at("00:00").do(job)` (C) このように記述すると`hh:mm:ss`のうち`mm:ss`を指定するという意味合いに解釈され「毎時ごとに00分00秒時点で~する」という意味になります。 ということで質問者さんがしたいことは(C)のような記述でも可能だと思います。