04、多进程学习之——进程间通信

2020-07-28  本文已影响0人  牛在A和C之间

回想起在参考代码中队列有两类:torch.multiprocessing.Queue,queue.Queue。前者用在多进程里,作为多进程中target的参数;后者用在多线程中,作为多线程中target的参数。于是在代码中用前者替换后者,程序正常运行。
以一个案例来理解进程间通信

import random
import time
from multiprocessing import Process,Queue

# from queue import Queue
# 队列有两类:torch.multiprocessing.Queue,queue.Queue。
# 前者用在多进程里,作为多进程中target的参数;后者用在多线程中,作为多线程中target的参数。

class WriteProcess(Process):
    """ 写的进程 """
    def __init__(self, q, *args, **kwargs):
        self.q = q
        super().__init__(*args, **kwargs)

    def run(self):
        ls = [
            '第1行内容',
            '第2行内容',
            '第3行内容',
            '第4行内容',
            '第5行内容',
        ]
        for line in ls:
            print('写入内容:{0}'.format(line))
            self.q.put(line)
            # 每写入一次,休息1-5秒
            time.sleep(random.randint(1, 5))


class ReadProcess(Process):
    """ 读取内容的进程 """
    def __init__(self, q, *args, **kwargs):
        self.q = q
        super().__init__(*args, **kwargs)

    def run(self):
        while True:
            content = self.q.get()
            print('读取到的内容:{0}'.format(content))


if __name__ == '__main__':
    q = Queue()
    t_write = WriteProcess(q)
    t_write.start()

    t_read = ReadProcess(q)
    t_read.start()

    t_write.join()
    t_read.terminate()

上一篇下一篇

猜你喜欢

热点阅读