ユーニックス総合研究所

  • home
  • archives
  • python-zutto-kurikaesu

Pythonでずっと繰り返すには?ループ文を使った無限ループ処理

  • 作成日: 2023-06-30
  • 更新日: 2023-12-25
  • カテゴリ: Python

Pythonでずっと繰り返す

Pythonでずっと繰り返して処理をする場合はどうしたらいいのでしょうか?
そういう場合は無限ループを使うのが一般的です。

この記事ではPythonでずっと繰り返して処理をする方法を解説します。

関連記事
Djangoでオブジェクトを一括作成・更新【bulk_create, bulk_update】
DjangoのModel.objects.filter()の使い方【QuerySet】
Djangoのmodelのcreate()の使い方【Python】
Django入門: ルートの設定 ~ 簡単な一行掲示板アプリを作る その4【Windows10】
NumPyのappend()の使い方: 配列の末尾に要素を追加
Numpyのarangeの使い方: 指定範囲の数列を生成する
Python3でYoutube Data APIを使ってキーワード検索する
PythonからC言語(my.puts)を呼び出して実行する

無限ループを使う

無限ループとは終わりのないループのことを言います。
実行すると無限にループが回ります。

例えば以下のようなコードを書きます。

while True:  
    try:  
        print('Hello')  
    except KeyboardInterrupt:  
        break  

while True:でwhile文の無限ループに入ります。
print('Hello')で画面に「Hello」と出力しています。
無限ループの最中にCtrl + Cなどが押された場合はKeyboardInterrupt例外が創出されます。
ですのでそれを検出したら無限ループからbreakします。

このコードを実行すると画面にずっと「Hello」と出力されていくので終了したい場合はCtrl + Cを入力してください。

ずっと繰り返し処理の応用

ずっと繰り返す処理の応用としては色々考えられます。
よくあるのは無限ループを書いてユーザーから入力を待ち受け、その入力に合わせて処理を分岐する方法です。

while True:  
    try:  
        text = input('input > ')  

        if text == 'hello':  
            print('Hello, World!')  
        else:  
            print('(^_^)')  
    except KeyboardInterrupt:  
        break  

上記の場合はinput('input > ')で入力待ちになります。
ユーザーが入力したテキストはtextに入りますので、このtextをif文で分岐します。
texthelloなら「Hello, World!」と出力し、それ以外は顔文字を出力します。

ゲームループを回す

ずっと繰り返す処理と言えばゲームなどが挙げられます。
ゲームは電源が切れるまでソフトウェアをずっと起動しておくタイプのソフトウェアです。
こういったソフトウェアでは無限ループが使われます。

import time  


def update():  
    return True  


def draw():  
    print('Hello')  



try:  
    while update():  
        draw()  
        time.sleep(0.1)  
except KeyboardInterrupt:  
    pass  

上記のコードではupdate()でゲームの更新ロジックを書き、draw()でゲームの描画を行います。
while文でupdate()を無限に呼び出し、同時にdraw()も呼び出します。

このような設計はゲームシステムの設計では一般的な設計と言えます。

マルチスレッドでずっと繰り返す

マルチスレッド処理でずっと繰り返す例を紹介します。
マルチスレッドとは並行処理のことです。

アプリケーションは起動するとLinuxではプロセスという単位が作られます。
そしてプロセスの中にはメインスレッドがあります。
マルチスレッドはこのメインスレッドの他に別にスレッドを作り、そのスレッドに並行処理をさせることを言います。

from threading import Thread  
import time  


def worker():  
    while True:  
        print('Hello')  
        time.sleep(0.1)  


thread = Thread(target=worker)  
thread.start()  
thread.join()  

上記のコードではマルチスレッドでworker()という関数を起動しています。
Pythonでマルチスレッドを行うにはthreadingThreadクラスを使います。
Thread(target=worker)でスレッドで起動する関数を指定します。
そしてthread.start()でスレッドをスタートし、thread.join()でスレッドの終了を待機します。

worker()では無限ループが回りprint('Hello')で画面に「Hello」と出力されます。
time.sleep(0.1)で100ミリ秒スリープを入れています。

async/awaitでずっと繰り返す

async/awaitでずっと繰り返すには以下のようなコードを書きます。

import asyncio  


async def worker():  
    while True:  
        try:  
            print('Hello')  
            asyncio.sleep(0.1)  
        except KeyboardInterrupt:  
            break  


async def main():  
    await worker()  


asyncio.run(main())  

async/awaitは同期的に処理を行うための仕組みです。
asyncが書かれた関数内ではawait式が使えます。
await式は他のasync関数などを実行し完了するまで待機します。

上記のコードではworker()で無限ループを回し、それの終了をmain()内で待機しています。

おわりに

今回はPythonでずっと繰り返す処理を解説しました。
色々繰り返し方がありますね。

🦝 < 無限ループ!

🦝 < とまらない!