Python threadingの使い方の備忘録です。
ビギナー向けの説明としてよく見かけるコード:
t1 = threading.Thread(target=<関数名>)
t1.start()
このthreading.Threadはクラスにも適用できます。
以下はMyTestThreadクラスのthread1とthread2がメッセージを交互に出力するサンプルです。
import threading
import time
class MyTestThread(threading.Thread):
def __init__(self, threadMessage) :
super().__init__() # おまじない
self.myMessage = threadMessage
def run(self):
while True:
print(self.myMessage)
time.sleep(1)
if __name__ == "__main__":
testThread1 = MyTestThread('thread1')
testThread2 = MyTestThread('thread2')
testThread1.start()
testThread2.start()
super().__init__()
を呼び出さないと、start()時に例外が起きます。
組み込み業界で生きてきたこともあり、スレッドの優先度指定方法が気になり調べてみたところ、Pythonの世界では組み込み用タスクのようなスレッド優先度は無いという衝撃的な結果となりました。
まあ、RTOSで使う言語でもないし、優先度なんて気にしないのかな。
当初、super()をsuper(MyTestThread, self).__init__()
と記述したところ、引数は不要と教えて頂きました。
親切にコメントくださった方、ありがとうございました。