Pythonのマルチスレッドの覚書

マルチスレッドの一般論はここにある。プログラムで重たい処理の部分を干渉なしにバッチ処理的にやる部分を一つのスレッドと他の部分と独立に実行させる。こんなイメージがスレッドである。

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()

こんな感じになる。