ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

multiprocessingでQueueのputとgetを別プロセスで回しながらやるやつ

スポンサードリンク

import time
import math
from multiprocessing import Process, Queue, cpu_count
import queue as pyqueue


def worker(q):
    while True:
        try:
            # なにか処理
            _ = q.get(timeout=15)
        except pyqueue.Empty:
            break


def main(q):
    for i in range(1000):
        q.put(i)


if __name__ == "__main__":
    q = Queue(maxsize=1000)
    p = Process(target=main, args=(q,))
    p.start()

    sub_ps = [Process(target=worker, args=(q,)) for _ in range(2)]
    _ = [p2.start() for p2 in sub_ps]

    p.join()
    _ = [p2.join() for p2 in sub_ps]

    p.close()
    _  = [p2.close() for p2 in sub_ps]
    q.close()