Queueにはいったジョブを指定したThread数で順番にさばいていきたいよ、っていうときに使います
あんまり大量にQueueにいれるとメモリからあふれて落ちるんだろうな
import threading import queue import time from datetime import datetime QUEUE = queue.Queue() def worker(): while True: _docs = QUEUE.get() job_worker(_docs) QUEUE.task_done() def job_worker(docs): print(datetime.now()) print(docs) time.sleep(1) return None def main(): _threads = [] for _i in range(2): _t = threading.Thread(target=worker) _t.daemon = True _t.start() _threads.append(_t) _docs = ["a", "b", "c", "d", "e", "f", "g"] for _doc in _docs: QUEUE.put(_doc) QUEUE.join() if __name__ == "__main__": main()
実行するとこんな出力になります、threadがふたつなのでふたつずつ処理されてますね
2017-12-17 17:55:49.769058
a
2017-12-17 17:55:49.769201
b
2017-12-17 17:55:50.770286
c
2017-12-17 17:55:50.770461
d
2017-12-17 17:55:51.771527
e
2017-12-17 17:55:51.771687
f
2017-12-17 17:55:52.772768
g
Python3.6で書いたサンプルです