KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

Threadの基本(ロックあり)

登録日 :2023/09/18 15:28
カテゴリ :Python基礎

Threadのサンプルコード

Threadを使って、処理を並列化する。
ロックを作ることで、処理を待つことも可能。たとえば、処理は並列化しておき、ファイルに書き込む部分はロックを取って実行させるということがありうる。

import logging
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                    format='%(threadName)s: %(message)s')


def worker1(d, lock):
    logging.debug('start')
    with lock:
        i = d['x']
        time.sleep(3)
        d['x'] = i + 1
        logging.debug(d)
    logging.debug('end')


def worker2(d, lock):
    logging.debug('start')
    lock.acquire()
    i = d['x']
    d['x'] = i + 1
    logging.debug(d)
    lock.release()
    logging.debug('end')


if __name__ == '__main__':
    d = {'x': 0}
    lock = threading.Lock()
    t1 = threading.Thread(target=worker1, args=(d, lock))
    t2 = threading.Thread(target=worker2, args=(d, lock))
    t1.start()
    t2.start()