• 进程之间通信


    IPC 指的是进程间通讯

    之所以开启子进程 ,肯定需要他帮我们完成任务,很多情况下,需要将数据返回给父进程。

    然而进程内存是物理隔离的

    解决方案:

    1.将共享数据放在文件中,就是慢

    2.管道 subprocess 中那个管道只能单向通讯,必须有父子关系

    3.共享一块内存区域 得操作系统帮你分配,速度快

    第三钟实现Manager

    from multiprocessing import Process,Manager
    import time
    
    def task(dic):
        print("子进程")
        dic["a"] = 1
    
    if __name__ == '__main__':
        # Manager 继承之间专用的与外界
        m = Manager()#开辟专用内存空间
        dic = m.dict({})#在这块内存空间生成一个字典
        # 生成公共区域的字典
        p = Process(target=task,args=(dic,))
        p.start()
        time.sleep(3)#因为进程开启速度较为慢,所以先执行父进程
        print(dic["a"])

    进程之间的通讯另一种方式 使用queue

    queue队列

    队列的特点:

    先进先出

    后进后出

    就放扶梯一样

    from multiprocessing import Process,Queue
    
    def task(queue):
        for i in range(3):
            queue.put(i)#将数据放入队列
    
    if __name__ == '__main__':
        q = Queue()
        p = Process(target=task,args = (q,))
        p.start()
        print(q.get())#取值规范先进先出
        print(q.get())
        print(q.get())

    同时queue队列中存取值,存在阻塞,也可通过修改参数来使得

    from multiprocessing import Process,Queue
    import time
    q = Queue(3)#限定管道中可以存放多少属性
    q.put("hello",block=False)#当管道已经存满的话,存放是否接受阻塞,True接受阻塞,False不接受阻塞
    q.put("world",block=False)
    q.put("nice",block=False)
    # q.put("12333",block=False)#放不下的直接异常 queue.Full
    print(q.get(block= False))
    print(q.get(block= False))
    print(q.get(block= False))
    # print(q.get(block=False))#当管道被被取空的话,是否接受阻塞,True接受阻塞,False不接受阻塞
    #异常 _queue.Empty

    timeout属性表示愿意等待的时间

    # 了解
    q = Queue(3)
    q.put("q",timeout=3)
    q.put("q2",timeout=3)
    q.put("q3",timeout=3)
    # 如果满了 愿意等3秒  如果3秒后还存不进去 就炸
    # q.put("q4",timeout=3)
    
    print(q.get(timeout=3))
    print(q.get(timeout=3))
    print(q.get(timeout=3))
    # 如果没了 愿意等3秒  如果3秒后还取不到数据 就炸
    print(q.get(timeout=3))
  • 相关阅读:
    docker 容器简单使用
    C++ | 程序编译连接原理
    C++ | 虚拟地址空间
    python学习笔记(十)——进程间通信
    菜鸟教程-c
    现代操作系统-第三版-疑问
    小米C++面经
    面经积累-杂
    哈希表相关题目-leetcode简单
    字符串相关题目-leetcode简单(6-10/共51道)
  • 原文地址:https://www.cnblogs.com/msj513/p/9936685.html
Copyright © 2020-2023  润新知