美文网首页
04、多进程学习之——进程间通信

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

作者: 牛在A和C之间 | 来源:发表于2020-07-28 18:58 被阅读0次

    回想起在参考代码中队列有两类: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()
    
    

    相关文章

      网友评论

          本文标题:04、多进程学习之——进程间通信

          本文链接:https://www.haomeiwen.com/subject/vekqrktx.html