美文网首页
Python3.x:多进程Pipes与Manager

Python3.x:多进程Pipes与Manager

作者: james_chang | 来源:发表于2018-04-06 23:18 被阅读0次

除了队列queue,还有别的方法能实现进程间通信么?这里就说一下Pipes,在两个进程之间建立一个管道,利用管道来通信

这里的管道就相当于建立了一个scoket连接,利用这个链接在进程间传输数据

from multiprocessing import Process
from multiprocessing import Pipe


# 定义了一个foo函数
def foo(conn):
    # 发送数据
    conn.send('hello')
    conn.close()


if __name__ == '__main__':
    # 生成pipe对象返回两个值对应管道的两头收发数据
    f_conn, s_conn = Pipe()
    # 将管道的另一头传给子进程
    p = Process(target=foo, args=(s_conn, ))
    p.start()
    # 接收数据
    print(f_conn.recv())
    p.join()

当然主进程也可以给子进程发消息,然后子进程收消息

说了这么多要么是操作复制的数据,要么利用管道传输数据,如何能能真正的操作同一份数据呢,这里就用到了Manager,先看看如何使用Manager

from multiprocessing import Process
from multiprocessing import Manager
import os


# 定义了一个foo函数,接收一个字典和一个列表
def foo(d, l):
    # 字典和列表都放进程ID
    d[os.getpid()] = os.getpid()
    l.append(os.getpid())


if __name__ == '__main__':
    # 生成Manager对象
    manager = Manager()
    d = manager.dict()
    l = manager.list(range(3))
    # 10个进程分别join
    p_list = []
    for i in range(10):
        p = Process(target=foo, args=(d, l))
        p.start()
        p_list.append(p)
    for res in p_list:
        res.join()
    
    # 打印字典和列表
    print(d)
    print(l)

这样就实现了操作同一份数据,虽然实现了这个效果,但是依然遵循进程间数据不共享的原则,只是通过数据的克隆和合并来实现这种效果

并且,这里不需要像进程一样加锁防止同时修改数据出错,Manager自带锁来防止这些情况

转载请注明出处

python自学技术互助扣扣群:670402334

相关文章

  • Python3.x:多进程Pipes与Manager

    除了队列queue,还有别的方法能实现进程间通信么?这里就说一下Pipes,在两个进程之间建立一个管道,利用管道来...

  • Python多进程通信

    Python多进程通信 Python的多进程通信提供了两种方法:Queue、Pipes。两者都在mutilproc...

  • Android binder解析

    Linux 系统提供的进程间通信(IPC)方式 Signals 信号量(System V IPC) Pipes 管...

  • APUE读书笔记-15进程内部通信(4)

    5、FIFOs FIFOs有时被称作有名管道。Pipes只能用在祖先进程创建的pipe之后具有关系的进程之间的通信...

  • Python3.x:进程锁与进程池

    进程锁 上篇说了不需要加进程锁,但是这里还是要了解一下进程锁,因为在python2中,进程加锁还是很有必要的 注意...

  • 0-Binder

    目的 解决进程间相互调用 常见IPC Signals 信号量 Pipes 管道 Socket 套接字(设置中底层会...

  • swoole的一些笔记(1)

    manager是进程,worker是进程,task是进程,master是线程,reactor是线程,心跳检测是线程...

  • Process

    队列 . manager 传递数据 两个进程池 进程 进程资源不共享,manage()方法可以通信 进程消耗CPU...

  • session_manager简介

    session_manager 用于管理Chrome进程的生命周期。通常位于目录 login_manager 下,...

  • 如何在swoole中使用task进程来处理耗时任务?

    我们知道,swoole中有两大进程,分别是 master 主进程和 manager 管理进程。 其中 master...

网友评论

      本文标题:Python3.x:多进程Pipes与Manager

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