Python学習【365日チャレンジ!】208日目のマスターU(@Udemy11)です。
最近、多様性という言葉をよく耳にしますが、個性的な人を見かける機会が多くなりました。
ほんと世の中にはいろいろな人がいます。
もちろん、私自身も他の人から見るとかなり個性的な印象を受けるのかもしれませんが、十人十色とはよくいったものです。
いろいろな人がいて、いろいろな役割を担っていて、世の中が成り立っているということを理解すれば、違った視点で物事を見ることができるようになるので、人生に行き詰まっていると感じているのなら、一度周りをじっくりと観察してみるとおもしろいかもしれません。
それでは、今日もPython学習をはじめましょう。
昨日の復習
昨日は、生存中のスレッドについて学習しました。
for
ループを使っていくつかのスレッドを生成して並列処理を取り扱いました。
空のリストを定義してスレッドを代入する方法とtherading.enumerate
を使って生存中のスレッドを返す方法がありましたが、therading.enumerate
を使うと、join
することができないカレントスレッドも一緒に返してしまうので、カレントスレッドは除外する必要がありました。
いろいろと試してみて理解できることがたくさんありました。
詳細については、こちらの記事を参考にしてください。
今日は、Timerオブジェクトについて学習します。
threading.Timer
Timerはその名のとおり、タイマーです。
タイマーをセットして、start()
を呼び出すことでタイマーが動き出し、指定した時間が経過したら、指定したファンクションを実行します。
import logging
import threading
import time
logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s')
def thread():
logging.debug('start')
time.sleep(2)
logging.debug('finish')
if __name__ == '__main__':
t = threading.Timer(3, thread)
t.start()
15行目のTimer
で時間を3秒、ファンクションをthread
に指定しています。
16行目のt.start()
でタイマーがスタートして3秒後にthread()
が実行されます。
実行結果
Thread-1: start
Thread-1: finish
3秒間は、何も表示されずに、1行目が表示されたあと、2秒後に2行目が出力されてプログラムが終了します。
Timerの引数
公式ドキュメントを見るとわかりますが、Timerの引数には、interval
、function
、args
、kwargs
があります。
先ほどのコードでは、interval
とfunction
を指定しましたが、【スレッドに渡す引数】で学習した内容と同じように関数に引数x
とy
を指定して値を渡すこともできます。
def thread(x, y=0):
logging.debug('start')
logging.debug(x)
logging.debug(y)
logging.debug(x * y)
if __name__ == '__main__':
t = threading.Timer(1, thread, args=(10, ), kwargs={'y': 200})
t.start()
9行目以降をこのコードに変更しています。
thread
関数に引数を指定して、logging.debug
でいろいろと出力しています。
実行結果
Thread-1: start
Thread-1: 10
Thread-1: 200
Thread-1: 2000
kwargs
は辞書型ですが、数字を入れる場合なら、16行目のargs=(10, )
をargs=(10, 200)
にしてkwargs={'y': 200}
を無くしても、kwargs={'y': 200}
をkwargs={'x': 10, 'y': 200}
にしてargs=(10, )
をなくしても同じ結果が得られます。
Timerの使い道
Timerの使い道はどんな場面があるだろうかと考えてみました。
複雑なプログラムがあって並行処理をさせると負荷がかかるので、少し待ってから処理をさせたいとか、終了したスレッドの値を取得するために実行時間を遅ら
せるという感じでしょうか?
同じ時間を司るtimeモジュールと同じような感じで、こんがらがりそうですが、処理を後回しにしたいときに使うようなイメージだと思うので、具体的な利用シ
ーンが出てきたときに使えるつかえるようにしておこうと思います。
それでは、明日もGood Python!