Python3で時間のかかる処理をマルチスレッドで対応する
以下のコードのdo_work_for_big_taskの箇所をお好みの処理に書き換えれば良い。
import threading
from queue import Queue
import time
lock = threading.Lock()
def do_work_for_big_task(item):
# ここで時間のかかる処理を行う(今回は一秒処理のかかるタスクを行うものと仮定してコンピュータにスリープさせる
)
time.sleep(1)
with lock:
print(threading.current_thread().name,item)
def worker():
while True:
item = q.get()
do_work_for_big_task(item)
q.task_done()
# キューを作成する
q = Queue()
#スレッド数: 4
for i in range(4):
t = threading.Thread(target=worker)
t.daemon = True
t.start()
start = time.perf_counter()
# 処理しなければいけないタスクの数:30
for item in range(30):
q.put(item)
# すべてのタスクが終了するまで待つ
q.join()
#処理が終了してから、実行にかかった事項が表示される
print('time:',time.perf_counter() - start)