• 进程间的通信


    1.multiprocessing.Queue()

    以Queue为例,在父进程中创建两个子进程,一个往Queue里写数据,一个从Queue里读数据:

    multiprcessing.Queue.put() 为 入队操作

    multiprcessing.Queue.get() 为 出队操作

    队列 线程 和 进程 安全

    put(obj[, block[, timeout]])

    将obj放入队列。 如果可选参数 block为True(默认值),timeout为None(默认值),则必要时阻止,直到空闲插槽可用。 如果超时是正数,它将阻止最多超时秒数,如果在该时间内没有空闲插槽可用,则会引发Queue.Full异常。 否则(块为False),如果空闲插槽立即可用,则将一个项目放在队列中,否则会引发Queue.Full异常(在这种情况下,忽略超时)。

    get([block[, timeout]])

    从队列中删除并返回一个项目。 如果可选的args块为True(默认值),超时为None(默认值),则在必要时阻止,直到项目可用。 如果超时为正数,则它将阻塞至多超时秒数,并在该时间内没有可用项目时引发Queue.Empty异常。 否则(block为False),如果一个项目立即可用,返回一个项目,否则会引发Queue.Empty异常(在这种情况下,忽略超时)。

    from multiprocessing import Queue
    
    q = Queue(5)
    
    q.put('A')
    q.put('F')
    q.put('B')
    q.put('C')
    q.put('D')
    
    print(q.qsize())
    q.put('E', timeout=2)

     

    q.full()用来判断队列是否已满

    q.empty()判断队列是否是空的

     

     

     

    # -*- coding:utf-8 -*-
    from multiprocessing import Process, Queue
    import os
    import time
    import random
    
    
    # 写数据进程执行的代码
    def write(q):
        print('Process to write: %s' % os.getpid())
        for value in ['A', 'B', 'C']:
            print('Put %s to queue...' % value)
            q.put(value)
            time.sleep(random.random())
    
    
    # 读数据进程执行的代码
    def read(q):
        print('Process to read: %s' % os.getpid())
        while True:
            value = q.get()
            print('Get %s from queue.' % value)
    
    
    if __name__ == '__main__':
        # 父进程创建Queue,并传给各个子进程:
        q = Queue()
        pw = Process(target=write, args=(q,))
        pr = Process(target=read, args=(q,))
        # 启动子进程pw,写入
        pw.start()
        # 启动子进程pr,读取
        pr.start()
        # 等待pw结束
        pw.join()
        # pr进程里是死循环,无法等待其结束,只能强行终止
        pr.terminate()
    

      输出:

    参考文档:https://blog.csdn.net/HeatDeath/java/article/details/72844120

  • 相关阅读:
    20145227 《Java程序设计》第8周学习总结
    20145227 《Java程序设计》第7周学习总结
    20145227《Java程序设计》第2次实验报告
    20145227《Java程序设计》第1次实验报告
    20145227 《Java程序设计》第6周学习总结
    20145227 《Java程序设计》第5周学习总结
    20145227 《Java程序设计》第4周学习总结
    20145227 《Java程序设计》第3周学习总结
    20145227 《Java程序设计》第2周学习总结
    20145227 《Java程序设计》第1周学习总结
  • 原文地址:https://www.cnblogs.com/GumpYan/p/12918960.html
Copyright © 2020-2023  润新知