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)

Related Contents

Pickup Contents