美文网首页
Python进程间通信

Python进程间通信

作者: 卡门001 | 来源:发表于2023-05-22 02:03 被阅读0次

    进程通信

    多线程通信简称IPC(IPC(Inter-Process Communication),多进程间无法直接实现数据交互,需要通过如下方式实现进程之间通讯

    • 管道:pipe 基于共享的内存空间
    • 队列:pipe+锁的概念--->queue
    • 共享内存

    队列 - Queue()

    from multiprocessing import Queue
    
    • 2.1 概念-----multiProcess.Queue
      创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。

    Queue([maxsize])创建共享的进程队列。
    参数 :maxsize是队列中允许的最大项数。如果省略此参数,则无大小限制。
    底层队列使用管道和锁定实现。

    • 2.2 Queue方法使用
      2.2.1 q.get的使用:
      是从队列里面取值并且把队列面的取出来的值删掉,没有参数的情况下就是是默认一直等着取值
      就算是队列里面没有可取的值的时候,程序也不会结束,就会卡在哪里,一直等着
    from multiprocessing import Queue
    q = Queue(3) # 生成一个队列对象,当队列超过了3个等待数据时,第4个会阻塞直接队列有数据消耗完成
    ###### put方法是往队列里面放值
    q.put('1')
    q.put('2')
    q.put('3')
    q.put('4') #阻塞
    ###### 其他方法:q.full() 是否满了 q.empty()是否空队列
    
    
    ###### get方法是从队列里面取值
    print(q.get())
    print(q.get())
    print(q.get())
    

    详情官方文档
    https://docs.python.org/zh-cn/3/library/multiprocessing.html
    注意:部分方法只在windows上有效

    管道:Pipe()

    from multiProcessing  import Pipe
    
    parent,child = Pepe() #管道默认情况下是双工的,即parent与child都有send()和recv()方法
    
    官网:https://docs.python.org/zh-cn/3/library/multiprocessing.html
    

    共享内存 - 进程内同步

    from multiprocessing import shared_memory
    shm = shared_memory.SharedMemory(create=True, size=10)
    

    共享内存使用较少,日常工程应用中,如果需要共享内存一般是用redis等三方库或工具作为媒介

    相关文章

      网友评论

          本文标题:Python进程间通信

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