質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1981閲覧

pythonで定期的にジョブを実行したい

ban0018

総合スコア0

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/12 02:12

pythonで定期的にジョブを実行したい

●やりたいこと
・定期的にジョブを実行したい
・ジョブ:2重ループで下位ループは15分毎、上位ループは2時間毎に回して処理Aを行いたい
・午前0時~午前6時までは関数を実行したくない

●発生している問題
・scheduleを使用して指定の時間に実行開始
・関数内でtime関数を使用して午前0時~3時に実行したら関数を抜けるように実装しました。
・12/10に実行したところ、12/11の午前0時に関数を抜けて、すぐにスケジュールが呼び出される挙動になりました。
・そして12/11中は関数GetItemが実行されず、12/12になったら実行されるようになりました。

なぜこのような挙動になってしまうのか、またどうしたら毎日実行できるようになるか、アドバイスをいただけないでしょうか。

該当のソースコード

import datetime
import schedule
import time

############################################################
def GetItem():

try: for i in range(10): for j in range(2): now = datetime.datetime.now() stoptime = now.replace(hour=3, minute=0, second=0, microsecond=0) if now < stoptime: print(now) print("Time 24:00 over") time.sleep(10) return ###処理A### print("Success.") print("%s 現在\n"%(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))) print("wait") time.sleep(900) print("%s 現在\n"%(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))) print("wait") time.sleep(7200) except Exception as e: print("Error") print("%s 現在\n"%(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"))) print('type:' + str(type(e))) print('args:' + str(e.args))

#################################################
if name == "main":
GetItem()
schedule.every().day.at("06:05").do(GetItem)
schedule.every().day.at("07:05").do(GetItem)
schedule.every().day.at("08:05").do(GetItem)
schedule.every().day.at("09:05").do(GetItem)
schedule.every().day.at("10:05").do(GetItem)
schedule.every().day.at("11:05").do(GetItem)
schedule.every().day.at("12:05").do(GetItem)
schedule.every().day.at("13:05").do(GetItem)
schedule.every().day.at("14:05").do(GetItem)
schedule.every().day.at("15:05").do(GetItem)
schedule.every().day.at("16:05").do(GetItem)
schedule.every().day.at("17:05").do(GetItem)
schedule.every().day.at("18:05").do(GetItem)
schedule.every().day.at("19:05").do(GetItem)
schedule.every().day.at("20:05").do(GetItem)
schedule.every().day.at("21:05").do(GetItem)
schedule.every().day.at("22:05").do(GetItem)
schedule.every().day.at("23:05").do(GetItem)

while True: schedule.run_pending() time.sleep(60)
メッセージ

Success.
2020/12/10 23:50:42 現在

wait
2020/12/11 00:05:42 現在

wait
2020-12-11 02:05:42.176485
Time 24:00 over
2020-12-11 02:06:52.178112
Time 24:00 over
2020-12-11 02:07:02.178163
Time 24:00 over
2020-12-11 02:07:12.178251
Time 24:00 over
2020-12-11 02:07:22.178373
Time 24:00 over
2020-12-11 02:07:32.178504
Time 24:00 over
2020-12-11 02:07:42.178552
Time 24:00 over
2020-12-11 02:07:52.178711
Time 24:00 over
2020-12-11 02:08:02.178796
Time 24:00 over
2020-12-11 02:08:12.178808
Time 24:00 over
2020-12-11 02:08:22.178873
Time 24:00 over
2020-12-11 02:08:32.179045
Time 24:00 over
2020-12-11 02:08:42.179207
Time 24:00 over
2020-12-11 02:08:52.179301
Time 24:00 over
2020-12-11 02:09:02.179412
Time 24:00 over
2020-12-11 02:09:12.179649
Time 24:00 over
2020-12-11 02:09:22.179815
Time 24:00 over
2020-12-11 02:09:32.179925
Time 24:00 over

Success.
2020/12/12 06:05:49 現在

補足情報(FW/ツールのバージョンなど)

python3.6.4
windwos8

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

そもそものはなしになりますが、Windowsなら、タスクスケジューラで定期的に実行させるようにすればどうでしょうか

投稿2020/12/12 03:19

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ban0018

2020/12/12 06:38

y_waiwai様 コメントありがとうございます。pythonプログラムの中で完結させたいと思っています。 どうしても解決しなかった場合はタスクスケジューラを使ってプログラム呼び出しをすることにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問