💡
Pythonのthreadを復習してみた。[個人的メモ]
Pythonはシングルスレッドだ。
例えば実行に1秒かかる関数taskがあるとする。
def task():
print('Starting a task...')
sleep(1)
print('done')
以下のように2回taskを呼べば、pythonはシングルスレッドのため、1回目のtaskの終了を待ってから2回目のtaskを開始するため、全体では2秒かかる。
task()
task()
これを解決するのがThreadだ。処理を並行して走らせることで1秒で処理を終わらせることが出来る。
pythonでthreadを使用するにはまずThreadをインポートする。
from threading import Thread
次に、Threadインスタンスを初期化し、threadを作る。
new_thread = Thread(target=fn,args=args_tuple)
Thread()が取る引数は、
target = メインスレッド以外で実行したい関数
args = 引数。 argはtupleなので注意。
次にstartを呼び、threadを開始する。
new_thread.start()
もし、メインスレッドで、スレッドの終了を待ちたいなら、join()を呼ぶ。
new_thread.join()
これまでの知識を使用して、サンプルコードを書く。
from time import sleep, perf_counter
from threading import Thread
def task(id):
print(f'Starting the task {id}...')
sleep(1)
print(f'The task {id} completed')
start_time = perf_counter()
# create and start 10 threads
threads = []
for n in range(1, 11):
t = Thread(target=task, args=(n,))
threads.append(t)
t.start()
# wait for the threads to complete
for t in threads:
t.join()
end_time = perf_counter()
print(f'It took {end_time- start_time: 0.2f} second(s) to complete.')
サンプルコードを実行すると It took 1.01 second(s) to complete. と表示された。並列処理が出来ていることがわかる。
以上。個人的pythonの復習でした。
参考
Discussion