• 13.2、进程的通信:Queue、Pipe、



    内容相关:

    概念:进程的通信

    Queue:创建与使用

    Pipe:创建与使用


    进程通信的概念

    • 进程的资源空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。
    • 通信方法:
      • 数据传输:一个进程将它的数据发送给另一个进程【如socket一般,把需要通信的数据传输给对方】
      • 管道:使用一片独立的区域【不在双方的资源空间中】,像一个有两个口的仓库一样,厂家负责在东门把产品放到仓库,司机负责在西门拉走产品
      • 资源共享:约定一片区域,双方都可以随意取放
      • 消息队列:这也是一个独立的区域,足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息

    Queue:

    • 可以使用队列multiprocessing.Queue来进行进程通信

    Queue 在multiprocessing 模块中:from multiprocessing import Queue

    • Queue的使用:
      • 1.创建对象:Queue对象=Queue()
      • 2.传入对象:要在主进程外使用Queue对象,需要作为参数传入image
      • 3.操作对象:【获取元素:Queue对象.get()】、【放入元素:Queue对象.put(元素)】
    #Queue在multiprocessing中
    from multiprocessing import  Queue,Process
    
    def f(q):#要在主进程外使用,需要作为参数传入
        q.put(['helloworld'])
        
    
    def m(q):
        print("get in p2:",q.get())
    
    if __name__=="__main__":
        q=Queue()
        p=Process(target=f,args=(q,))
        p.start()
        p2=Process(target=m,args=(q,))
        p2.start()


    Pipe:

    • 可以使用管道Pipe来进行进程通信

    Pipe 在multiprocessing 模块中:from multiprocessing import Pipe

    • Pipe的使用:
      • 1.创建对象:第一个Pipe对象,第二个Pipe对象=Pipe(),返回两个对象,第一个对象只能发,第二个对象只能收
      • 2.传入对象:在要发送的进程,传入第一个Pipe对象;在要接收的进程,传入第二个Pipe对象image
      • 3.操作对象:【获取元素:第一个对象.recv()】、【放入元素:第二个对象.send(元素)】
      • 4.操作完成后关闭管道:第一个对象.close(),第一个对象.close()
    from multiprocessing import Pipe,Process
    
    def f(conn):
        a=[1,2,3,4]
        conn.send(a)
        conn.close()
    def m(conn):
        a=conn.recv()
        conn.close()
    
    
    if __name__=="__main__":
        parent_conn,child_conn=Pipe()#返回两个值,第一个只能发,第二个只能收
        p1=Process(target=f,args=(child_conn,))
        p2 = Process(target=m, args=(parent_conn,))#
        p1.start()
        p2.start()
        p1.join()
        p2.join()


  • 相关阅读:
    Evaluate Reverse Polish Notation(逆波兰表达式)
    PostreSQL linux添加psql 命令
    C#用文件流读取cvs内容并返回DataTable,并把第一行设为列名
    鹅鹅鹅饿饿
    编译器和解释器
    delphi之多线程编程
    Arduino 板子 COM 接口找不到设备
    JS事件冒泡
    vi编辑器的使用(2)
    vi编辑器的使用(1)
  • 原文地址:https://www.cnblogs.com/progor/p/8439320.html
Copyright © 2020-2023  润新知