zoukankan      html  css  js  c++  java
  • 进程之间通信

    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))
  • 相关阅读:
    python基础练习(七)列表、元组、字典遍历
    python基础练习(六)字典_练习
    python基础练习(五)元组_练习
    python基础练习(四)列表_练习
    滑动条设置为角度
    cell-元胞数组
    MATLAB 爬取天气预报数据
    正则表达式匹配
    函数检视
    相关分析(三)——如何在Excel中计算两个变量之间的相关系数?
  • 原文地址:https://www.cnblogs.com/msj513/p/9936685.html
Copyright © 2011-2022 走看看