- APIの制限があるからこの処理は1秒待ってから行わせたい
- 段階的に結果を出したいので処理ごとに一時的に止めたい
のように考えたことがあるのではないでしょうか。
今回はこのような処理をPythonのtimeモジュールのsleep関数を使って実装する方法を紹介していきます。
また、ミリ秒単位で使う方法や、繰り返しの中で使う方法も解説していきます。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
sleep関数の基本的な使い方
sleepの基本
まずはsleepをプログラムの中で使えるようにimportしましょう。今回はsleepのみを使うので、timeモジュールからsleep関数のみをimportします。
from time import sleep
これでtimeモジュールの中からsleep関数のみをimportする事ができました。この方法でimportすると、sleep以外のtime内の関数にアクセスできなくなるので注意してください。
実際に確認してみましょう。
Jupyter lab上で試してみます。
In:
from time import sleep print(sleep) print(time) print(time.time) print(time.sleep)
Out:
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-1-7fc2c0ba51f4> in <module> 1 from time import sleep 2 print(sleep) ----> 3 print(time) 4 print(time.time) 5 print(time.sleep) NameError: name 'time' is not defined
このように、from [module] import hoge を使うと、importしたhogeのみ使えるようになり、それ以外のものにはアクセスできません。このような方法でimportすると
- 明示的に何を読み込んだのか分かる様になる
- 毎回time.sleepのようにモジュール名から書く必要がなくなる
点において便利です。では実際にsleep関数の使い方を確認していきましょう。
sleep(secs)は引数として秒数を受け取ります。引数secsはint型でもfloat型でも構いません。
print("begin") sleep(1) print("end")
これでbeginからendの間に1秒間の間を開ける事ができました。ただし注意点としては、当然ですがマイナスの秒数を受け取ることはできません。
sleep(-0.1) # 実行結果 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-4-4977669c6d9f> in <module> ----> 1 sleep(-0.1) ValueError: sleep length must be non-negative
必ずプラスの数を引数に与えることにだけ注意してください。
sleepをミリ秒で使う
次に、sleep関数を使ってミリ秒(1/1000秒)単位で処理を止めてみましょう。
print("begin") sleep(0.001) print("end")
これでbeginからendの間に0.001秒間の間を開ける事ができました。このように、sleep関数の使い方はとても簡単です。
sleep関数の応用的な使い方
では、応用としてループ処理の中でsleep関数を使う方法を紹介します。ここでは、forループの中で別の関数を呼び出し、ループごとに0.5秒sleepさせる処理を考えます。
簡単のため、呼び出す関数は「ループ回数をprintするだけの関数」とします。
実際に使うときは、「単位時間ごとにリクエスト制限があるapiを叩く関数」や「段階的にwebページの要素を表示していく関数」などが対象になるかと思います。
では実際に見てみましょう。
def stub(i): print("{}回目の処理です。".format(i)) max_iter = 5 secs = 0.5 for i in range(max_iter): sleep(secs) stub(i)
1~2行目で呼び出される関数を定義しています。stubという名前の関数で、引数iを受け取ります。
print関数は引数として与えられたものをコンソールに出力しますが、文字列型のメソッドの.format()を使っていることに注意してください。
これはこのメソッドを呼び出した文字列内の{}という表記に、.fortmat()の引数として渡されたobjectを代入する操作を行います。4~5行目はループ回数とsleepする秒数を定義しています。
6行目からはループ処理に入ります。このループの中でsleep関数を呼び出してからstub関数を呼び出しています。
これがループ処理内でsleep関数を使う例になります。
このままPythonを学び続けて大丈夫?
なぜPythonを学ぶのか?
あなたがPythonを学ぶ理由は何でしょうか?
- Pythonが人気だからとりあえず学んでいる
- AIや機械学習の分野に興味があるから
Pythonは初心者向けの言語と言われています。その理由としてシンプルでわかりやすい構文や、実用的なライブラリが豊富なことが挙げられ、実際に学びやすい言語です。
しかし、もしあなたが機械学習に興味があって、とくに知識も無いまま学習を進めると、挫折する可能性が高いと言えます。
機械学習の分野はプログラミング以外にも、専門的な知識や数学の知識も必要になります。ただなんとなく学習していると早い段階でつまづきやすく、そのまま挫折してしまうなんてことも…。
そのため、挫折しないためには、
- 最適な学習環境を用意する
- 必要なライブラリ・ツールを導入する
- わからないことを質問できるメンターを見つける
などが必要になります。
効率よく学びたいなら、無料カウンセリングがおすすめ
まだまだ知りたいことがたくさんある!
もっと詳しくPythonについて知りたい!
といった悩みや願望を持っている方は、弊社「侍エンジニア」をご利用下さい。
侍エンジニアでは、
- 現役エンジニアによるマンツーマンレッスン
- キャリアアドバイザーによる転職・就職支援
- 業界屈指のフリーランス・起業サポート
を受けることができます。
業界屈指のコンサルタントから、効率的な学習方法や仕事獲得術、今後のキャリアまでさまざまな疑問を相談してみませんか?遠方の方でもオンラインで受講できます!お気軽に受講下さい。
侍エンジニア無料カウンセリングを受ける
まとめ
今回はtime.sleepの使い方を紹介しました。
sleep関数はプログラム中で何秒か処理をストップさせたいときなどに便利ですね。簡単ですぐ使いこなせる機能なので、ぜひ活用してください。