KnowHow

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

QueueとThreadを使った並列処理

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

QueueとThreadを使った並列処理サンプルコード

pythonのQueueを使うことで、同一のリスト(メモリ)を使い並列処理を行うことができる。

例えば、数百台あるスイッチのリストをテキストファイルで持ってい置き、Queueを使って読み込む。各スイッチに対する処理は独立しているのでThreadで処理させる。この時Queueから対象機器を読み込むことで、Thread動詞が重複して処理するということを防ぐことができる。

以下、Queueを使ってメインのログ取得をし、それぞれの解析をThreadを立てて並列処理するイメージでのサンプルプログラム。

import logging
import queue
import threading
import time

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


def worker1(queue):
    logging.debug('start')
    while True:
        item = queue.get()
        time.sleep(1)
        if item is None:
            break
        logging.debug(item)
        queue.task_done()

    logging.debug('long process---->')
    logging.debug('end')



if __name__ == '__main__':
    queue = queue.Queue()
    for i in range(10):
        queue.put(i)

    ts = []
    for _ in range(3):
        t = threading.Thread(target=worker1, args=(queue, ))
        t.start()
        ts.append(t)

    logging.debug('tasks are not done.')
    queue.join()
    logging.debug('tasks are done.')

    for _ in range(len(ts)):
        queue.put(None)

    [t.join() for t in ts]