マルチスレッドの一般論はここにある。プログラムで重たい処理の部分を干渉なしにバッチ処理的にやる部分を一つのスレッドと他の部分と独立に実行させる。こんなイメージがスレッドである。
Python上でスレッドを使った一例を示す:
import threading
a_final = 0
def count():
global a_final
for i in range(10000000):
a = i+1
a_final = a
print('end_count')
return
def main():
t = threading.Thread(target=count)
t.daemon = True
t.start()
t.join()
print(a_final)
print('end_main')
if __name__ == '__main__':
main()
関数mainの中で関数countをスレッドとして走らせる。メソッドJoin()はスレッドとそのスレッドを走らせた関数(今の場合はmain)が同時に終了するように同期をとるメソッドである。
これのGUI版は以下のようになる:
import tkinter as tk
from tkinter import ttk
import threading
a_final = 0
root = tk.Tk()
label = tk.Label(text='vinoth')
label.pack()
def fix():
t = threading.Thread(target=count)
t.daemon = True
t.start()
t.join()
label['text'] = a_final
return
def count():
global a_final
for i in range(100000000):
a = i+1
a_final = a
button = tk.Button(text='sub', command=fix)
button.pack()
dropdown = ttk.Combobox()
dropdown.pack()
root.mainloop()
こんな感じになる。