処理を一時停止!Pythonでsleepを使う方法【初心者向け】
初心者向けにPythonでsleepを使う方法について解説しています。sleepを使うことで処理を一時停止することができます。実際にどういう処理が行われるのかサンプルプログラムを書きながら説明しているので、スムーズに理解できるはずです。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
nakamoto
今回は、Pythonでsleepを使う方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
sleepを使えるようになると、処理を一時停止したい時に任意の時間を設定でき非常に便利です。
今回は処理の流れや書き方を理解していきます。
目次
- Pythonのsleepについて
- Pythonでsleepを使う書き方
- Pythonでsleepを実際に書いてみよう
- sleepの精度を上げる方法
- 注意点
- signalモジュールを利用する例
- Pythonを学習中の方へ
そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。
Pythonのsleepについて
Pythonのsleepを使用すると、処理を一時停止できます。
sleepはsleep関数と呼ばれ、timeモジュールの中にある関数の1つです。
timeモジュールでは、時刻に関するさまざまな関数を使用できます。
sleep関数を使う理由は、コンピューターの処理負担を軽減するためです。
処理量が膨大な場合、CPUと呼ばれるコンピューターの頭脳部分の処理速度が追いつかず、動作が重くなります。
そういったときにsleep関数を使うことで、少しずつ処理を行い、コンピューターの負担を減らすことができます。
一時停止しながら処理を行うことは、処理を一定間隔で行うことです。
この処理方法をバッチ処理といいます。
バッチ処理とは、銀行などの金融システムや、大企業の会計システムを就業後から朝にかけてコンピューターに少しずつ実行させる際にも利用されます。
Pythonでsleepを使う書き方
文法
import time time.sleep(秒数)
解説
1行目のimport timeでは、timeモジュールをimportしています。
Pythonでsleepを書く場合、必ずtimeモジュールをimportします。
Pythonでimportを使う方法の記事もあわせてご覧ください。
2行目のtime.sleepでは、timeモジュールのsleep関数を使用しています。
time.sleep(10)と秒数に数字を入れることで、指定秒数処理を停止します。
指定する数字は整数もしくは小数です。
Pythonでsleepを実際に書いてみよう
コード
import time for i in range(3): time.sleep(1) print(i)
表示結果(sleepする場合)
解説
1行目のimport timeでは、timeモジュールをimportしています。
2行目のfor i in range(3):では、for文を使用し、配列の値が存在する限り処理を続ける繰返し処理を行っています。
Pythonでfor文を使う方法の記事もあわせてご覧ください。
range(3)では、配列を3個生成しています。
Pythonでrangeを使う方法の記事もあわせてご覧ください。
3行目のtime.sleep(1)では、1秒間処理を停止しています。
4行目のprint(i)では、配列の添字を表示しています。
配列の添字は0から始まるので、0 1 2と合計3個の数字が1秒ごとに表示されます。
もし、sleepしなければ、次のように一瞬ですべての表示が表示されます。
表示結果(sleepしない場合)
sleepの精度を上げる方法
sleepを使用することで、処理を一時停止できました。
実際に、sleepを使用する場合の実行動画と、sleepを使用しない場合の実行動画を見比べていただくことで、sleepが具体的にどのような動作をしているかご理解いただけたかと思います。
次に、sleepの問題点と対応策について解説します。
sleepの問題点
次のコードでは、sleepを利用して実行する場合、1秒間処理を停止していました。
しかし、実際には1秒間だけ停止しているわけではありません。
最低1秒以上停止しています。
今回用意した処理のたびに1秒停止するコードでは、具体的には次の2ヶ所の処理時間も加算されます。
#for文の処理時間が加算される #print処理時間が加算される
コード
import time for i in range(3): #for文の処理時間が加算される time.sleep(1) #1秒sleepする時間が加算される print(i) #print処理時間が加算される
sleep問題を解決する必要性
人間からするとコンマ数秒の誤差であるため気になりません。
しかし、コンマ数秒の誤差が問題になることもございます。
問題1:自動運転技術
自動運転技術では、コンマ数秒のズレが大きな事故につながります。
問題2:金融取引処理
金融取引処理において、コンマ数秒の投資処理のズレが大きな損失を生みます。
つまり、使用する分野によってはコンマ数秒のズレが生じにくいような精度を向上させる必要があります。
注意点
注意点として今回ご紹介するコードを利用すれば、自動運転技術、金融取引処理で処理のズレが発生しないわけではありません。
実務では利用環境に応じた実装が必要になります。
例えば、今回のコードをWindows上で実行すると次のようなエラーが発生します。
AttributeError: module 'signal' has no attribute 'setitimer'
signalモジュールを利用する例
今回はsignalモジュールを利用して、0.1秒(100ミリ秒)までsleep処理の精度を向上させる対策例を紹介します。
コード
import signal import time signal.setitimer(signal.ITIMER_REAL, 0.1, 0.1) for i in range(3): time.sleep(1) print(i)
表示結果(signalを利用した場合)
解説
1行目のimport signalでは、signalモジュールをimportしています。
2行目のimport timeでは、timeモジュールをimportしています。
3行目のsignal.setitimer(signal.ITIMER_REAL, 0.1, 0.1)では、タイマーが実行された時に SIGALRM を送ります。
1回目までの実行時間が0.1秒(100ミリ秒)、2回目以降の実行間隔が0.1秒(100ミリ秒)であることを指定しています。
これにより、0.1秒(100ミリ秒)間隔で処理されていることが100ミリ秒単位で表示されます。
4行目のfor i in range(3):では、for文を使用し、配列の値が存在する限り処理を続ける繰返し処理を行っています。
Pythonでfor文を使う方法の記事もあわせてご覧ください。
range(3)では、配列を3個生成しています。
Pythonでrangeを使う方法の記事もあわせてご覧ください。
5行目のtime.sleep(1)では、1秒間処理を停止しています。
6行目のprint(i)では、配列の添字を表示しています。
配列の添字は0から始まるので、0 1 2と合計3個の数字が1秒ごとに表示されます。
今回は、0 1 2 と表示する間に0.1秒(100ミリ秒)間隔で経過時間が表示されています。
今回は、Pythonでsleepを使う方法を解説しました。
入門向けPythonの学習サイトも記事にしているので、学習したい方は参考にしてみてください。
Pythonを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPythonコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、人工知能(AI)や機械学習の基礎を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!