見出し画像

書籍「Pythonチュートリアル 第3版 11.4 マルチスレッド」のサンプルプログラムを、より分かりやすい例で書き直したあ〜(^o^)v

書籍「Pythonチュートリアル 第3版 11.4 マルチスレッド」を読んだのですが、、、具体的な説明が一切無いマルチスレッドサンプルプログラムが載っていました💦

幸いマルチスレッドプログラミングの経験があったので、なんとか調べながらサンプルプログラムを理解出来ました。。。

で、、、より分かりやすいと思う、注釈をバンバン入れた類似のサンプルプログラムを書いてみたので公開します。

このサンプルプログラムが、Pythonマルチスレッドプログラミングの理解に少しでも役に立てば幸いです。


なお、このサンプルプログラムは⬇️で今日(2021/06/07)から60日の間ダウンロード出来ます。



サンプルプログラム

# 書籍「Pythonチュートリアル 第3版 11.4 マルチスレッド」のサンプルプログラムを、分かりやすい例で書き直したあ〜(^o^)v


# 必要なインポート。。。
import threading, time


# Thread オブジェクトのサブクラスを作成
# __init__() と run() メソッド だけをオーバライド (他のメソッドはオーバーライド不可!!)
class SubThread(threading.Thread):
   def __init__(self):
       # 必ずこのスレッドが何かを始める前に Thread.__init__() のコンストラクタを呼ぶ!!
       threading.Thread.__init__(self)

   # start()メソッドは run()メソッドを起動する!!
   def run(self):
       time.sleep(2)  # サブスレッドは最初に2秒待つ

       # サブスレッドのループ
       for i in range(5):  # 5回ループする
           print('                  サブスレッド ', i + 1)
           time.sleep(4)  # 4秒待つ


sub_t = SubThread()  # サブスレッドのインスタンス作成
sub_t.start()  # サブスレッド活動開始! run()メソッドを起動する!!
print('サブスレッド起動!\n')

# メインスレッドのループ
for i in range(5):  # 5回ループする
   print('メインスレッド ', i + 1)
   time.sleep(4)  # 4秒待つ

sub_t.join()  # サブスレッドが終了するまで待機
print('\nサブスレッド終了!')



'''
//実行結果//

サブスレッド起動!

メインスレッド  1
                 サブスレッド  1
メインスレッド  2
                 サブスレッド  2
メインスレッド  3
                 サブスレッド  3
メインスレッド  4
                 サブスレッド  4
メインスレッド  5
                 サブスレッド  5

サブスレッド終了!
'''


☆ 追記付録 ☆

「Pythonチュートリアル 第3版 11.5 ログ取り」を読んで、一部をログ出力に書き換えました。。。

なお、この書き換えサンプルプログラムは⬇️で今日(2021/06/08)から60日の間ダウンロード出来ます。



書き換えサンプルプログラム

# 付録「Pythonチュートリアル 第3版 11.5 ログ取り」を読んで、一部を logging で書き直したあ〜(^o^)v


# 必要なインポート。。。
import threading, time

# ログ取りで必要なインポート。。。
import logging


# Thread オブジェクトのサブクラスを作成
# __init__() と run() メソッド だけをオーバライド (他のメソッドはオーバーライド不可!!)
class SubThread(threading.Thread):
   def __init__(self):
       # 必ずこのスレッドが何かを始める前に Thread.__init__() のコンストラクタを呼ぶ!!
       threading.Thread.__init__(self)

   # start()メソッドは run()メソッドを起動する!!
   def run(self):
       time.sleep(2)  # サブスレッドは最初に2秒待つ

   # サブスレッドのループ
       for i in range(5):  # 5回ループする
           print('                  サブスレッド ', i + 1)
           time.sleep(4)  # 4秒待つ


logging.basicConfig(level=logging.DEBUG)  #  ログ出力のレベルを DEBUG に設定

sub_t = SubThread()  # サブスレッドのインスタンス作成
sub_t.start()  # サブスレッド活動開始! run()メソッドを起動する!!

logging.debug('サブスレッド起動!\n')  # DEBUG ログ出力

# メインスレッドのループ
for i in range(5):  # 5回ループする
   print('メインスレッド ', i + 1)
   time.sleep(4)  # 4秒待つ

sub_t.join()  # サブスレッドが終了するまで待機
print()
logging.debug('サブスレッド終了!')  # DEBUG ログ出力



'''

DEBUG:root:サブスレッド起動!

メインスレッド  1
                 サブスレッド  1
メインスレッド  2
                 サブスレッド  2
メインスレッド  3
                 サブスレッド  3
メインスレッド  4
                 サブスレッド  4
メインスレッド  5
                 サブスレッド  5

DEBUG:root:サブスレッド終了!

'''



#Pythonチュートリアル第3版
#Pythonチュートリアル
#マルチスレッド
#ログ出力
#ログ取り
#ログ
#threading
#Thread
#logging

#Chromebook 上の #Linux#Python #Python3 #プログラミング を勉強中 !