本記事ではPythonでのスレッドの使い方について超わかりやすく紹介しています。Pythonは非常に人気なプログラミング言語です。そんなPythonでthreadingモジュールを使いながらスレッドを実装方法を学習しましょう!
本記事の目標
threadingモジュールを利用して、スレッドの処理をを行います。
スレッドについてわからない方もソースコードを読めば意味が理解できるかと思います。
実行環境は「python 3.8.8」です。
スレッド化していないコード
一般的な関数を利用したソースコードですので難しくないかと思います。
処理は上から実行されることから、実行結果も上から流れるように表示されています。
import time
def process1():
print('ーー処理1が実行開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理1が実行終了')
def process2():
print('ーー処理2が実行開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理2が実行終了')
if __name__ == '__main__':
print('start')
process1()
process2()
print('end')
【実行結果】
start
ーー処理1が実行開始
ーー処理1が実行終了
ーー処理2が実行開始
ーー処理2が実行終了
end
threadingモジュールを用いたスレッド処理
先程のコードを少し書き換えてスレッドの処理を記述しました。
「threading.Thread(target=スレッド処理したい関数名)」とすることでスレッドを行うことができます。
一番注目してほしいことは実行結果です。順番をイメージしながら実行結果を見てください。
22行目のプリント文が、最後ではなく真ん中に実行されていることが見て取れます。
import threading
import time
def process1():
print('ーー処理1が開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理1が終了')
def process2():
print('ーー処理2が開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理2が終了')
if __name__ == '__main__':
# スレッドを行うインスタンスの作成
p1 = threading.Thread(target=process1)
p2 = threading.Thread(target=process2)
print('start')
p1.start()
p2.start()
print('end')
【実行結果】
start
ーー処理1が開始
ーー処理2が開始
end
ーー処理1が終了
ーー処理2が終了
引数を持つスレッド
引数を持つ関数にスレッド処理を行う場合は、
threadingの中で「args=」で引数に指定します。
import threading
import time
def process1(x, y):
print('ーー処理1が開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理1が終了。結果:', x*y)
def process2(x, y):
print('ーー処理2が開始')
time.sleep(3) # 時間がかかる処理を再現
print('ーー処理2が終了。結果:', x+y)
if __name__ == '__main__':
# スレッドを行うインスタンスの作成
p1 = threading.Thread(target=process1, args=(1,5))
p2 = threading.Thread(target=process2, args=(1,5))
print('start')
p1.start()
p2.start()
print('end')
【実行結果】
start
ーー処理1が開始
ーー処理2が開始
end
ーー処理1が終了。結果: 5
ーー処理2が終了。結果: 6
threadingのパッケージでは他にもデーモン化ができたり、いろいろなメソッドを備えているので詳しくは公式リファレンスからどうぞ。
ということで本記事はPythonでのthreadingを用いたスレッドの実装方法を紹介しました。
最後まで読んでいただきありがとうございました\(^o^)/
超オススメのPC用品
PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)
外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/