Pythonのthread引数

Python学習【365日チャレンジ!】205日目のマスターU(@Udemy11)です。

朝晩すずしくなってきたとおもっていた矢先、梅雨に戻ったような蒸し暑さのあさが来たと思ったら、台風が近づいて来ているようです。

異常気象と言われていますが、台風も年に何回か最大規模の台風が来て被害が出ているので、今回の台風が大きな被害を起こさないことを願うばかりです。

それでは、今日もPython学習をはじめましょう。

昨日の復習

昨日は、threadingモジュールについて学習してきました。

並列処理ができるthreadingですが、timeモジュールを使ってタイムラグを入れて出力してみました。

loggingを使って出力することもできました。

threadingの基本的な使い方については、昨日の記事をごらんください。

今日は、スレッドにわたす引数について学習します。

スレッドの引数

昨日は、Threadに引数のtargetに関数名を入れましたが、nameargskwargsなどの引数を渡すことができます。

import logging
import threading
import time

logging.basicConfig(
    level=logging.DEBUG, format='%(threadName)s: %(message)s')

def thread1():
    logging.debug('start1')
    time.sleep(3)
    logging.debug('end1')

def thread2(x, y=0):
    logging.debug('start2')
    logging.debug(x)
    logging.debug(y)
    time.sleep(5)
    logging.debug('end2')

if __name__ == '__main__':
    t1 = threading.Thread(name='rename thread', target=thread1)
    t2 = threading.Thread(args=(10, ), kwargs={'y': 5}, target=thread2)
    t1.start()
    t2.start()
    print('started')

ロギングを使っていますが、21行目で引数targetで、8行目の関数thread1を指定して、スレッドの引数nameを渡しています。

22行目のスレッドでは、引数targetに、13行目の関数thread2を指定して、引数のxyにそれぞれargskwargs105を渡しています。

実行すると次のような出力結果になります。

実行結果

rename thread: start1
Thread-1: start2
Thread-1: 10
Thread-1: 5
started
rename thread: end1
Thread-1: end2

スレッド名がrename thread変更されているので、2つ目のスレッドがThread-1になっています。

また、logging.debugxyを出力しています。

5行目のstartedを出力したあと、3秒後にrename thread: end1が出力され、そのあと2秒後にThread-1: end2が出力されます。

使いみちが見えない

酒井さんの講座では、基本の使い方を解説されているのですが、具体的にこんな場面で使うという具体例は紹介されていません。

Udemy講師 酒井さん プログラミング Python

実際に具体的なコードを書く場面に直面してはじめて、今回学習したことが理解できるかもしれません。

具体的なコードをどれだけ書いているかということ、つまり経験だけが、スキルアップにつながる唯一の方法なので、どんどんコードを書くことが重要です。

その前に基本的な使い方を理解していないとコードを書いていてもちんぷんかんぷんになってしまうので、必要最低限の使い方を理解できれば、具体的なコードを書いて実践経験を積み上げましょう。

それでは明日もGood Python!