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]