进程间通讯-2(pipe)

通过pipe 管道的方式也可以实现进程间通信。

父进程和子进程之间可以实现相互通信。

from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, ‘hello from child‘])
    conn.send([42, None, ‘hello from child2‘])
    print(‘from parent:‘,conn.recv())
    conn.close()

if __name__ == ‘__main__‘:
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print(parent_conn.recv())  # prints "[42, None, ‘hello‘]"
    print(parent_conn.recv())
    parent_conn.send(‘你还好么?‘)
    p.join()

运行结果:

[42, None, ‘hello from child‘]
[42, None, ‘hello from child2‘]
from parent 你还好么?
时间: 2024-10-14 15:21:32

进程间通讯-2(pipe)的相关文章

Linux 进程间通讯方式 pipe()函数 (转载)

转自:http://blog.csdn.net/ta893115871/article/details/7478779 Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6->套接字(sicket) 在这里我们看一下第一种====管道(pipe).有名管道(fifo)见其它文章. eg :我们以前学的命令 cat  file | grep  "abc

【IPC进程间通讯之二】管道Pipe

IPC进程间通信+管道Pipe         IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,其实质是共享内存,常用IPC之一.管道不仅可以用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道同样封装计算机底层网络实现,提供一个良好的API接口.                1.管道(Pipe):        管道分为匿名管道和命名管道.        匿名管道只能用于父子进程间通信 ,不能跨网络通

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

 IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对的IPC的持续性(Persistence of IPC Object)也有三种: 随进程持续的(Process-Persistent IPC) IPC对象一直存在,直到最后拥有他的进程被关闭为止,典型的IPC有pipes(管道)和FIFOs(先进先出对象) 随内核持续的(Kernel-persist

Windows下的进程间通讯及数据共享

Windows 下的进程间通讯及数据共享 Windows 下有很多方法实现进程间通讯,比如用 socket,管道(Pipe),信箱(Mailslot),等等.但最基本最直接的还是使用内存共享.其他方法最终还是会绕道这里. 可想而知,如果物理内存只有一份,让这份内存在不同的进程中,映射到各自的虚拟地址空间上,每个进程都可以读取同一份数据,是一种最高效的数据交换方法.下面我们就讨论如何实现它. 共享内存在 Windows 中是用 FileMapping 实现的.我们可以用 CreateFileMap

进程间通讯

进程间通讯(Inter process communication :IPC) 1>6种进程间通讯: 4种数据共享机制:包括管道(分为无名管道和有名管道),消息队列.共享内存.UNIX域套接字(socket): 1种实现异步机制:信号: 1种实现互斥和同步:信号量: ①.管道(pipe) 管道是一种特殊的文件: 管道是文件:可对它使用文件IO的读写函数: 特殊的:管道是由内核实现的,在内存中文件,它不能使用类似fseek.lseek()的对文件指针的操作:管道是单向的(半双工): (1).无名管

linux_c开发(5-1)进程间通讯_进程间通讯概念

目的:为什么进程间需要通信? 1.数据传输 一个进程需要将他的数据发送给另外一个进程. 2.资源共享 多进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件. 4.进程控制 有些进程希望完全控制另一个进程的执行(eg:debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他的状态改变. 发展: linux进程间通讯(IPC)由以下及部分发展而来: 1.UNIX间进程通讯 2.基于system v进程间通讯 3.POSIX进

管道实现进程间通讯 、WaitNamedPipe

一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能够分成两种,单向的双向的.依据管道的特点,命名管道通经常使用在网络环境下不同计算机上执行的进程之间的通信(当然也能够用在同一台机的不同进程中)它能够是单向或双向的:而匿名管道仅仅能用在同一台计算机中,它仅仅能是单向的.匿名管道事实上是通过用给了一个指定名字的有名管道来实现的. 使用管道的优点在于:读

[转]Windows 下的进程间通讯及数据共享

http://blog.codingnow.com/2005/10/interprocess_communications.html Windows 下有很多方法实现进程间通讯,比如用 socket,管道(Pipe),信箱(Mailslot),等等.但最基本最直接的还是使用内存共享.其他方法最终还是会绕道这里. 可想而知,如果物理内存只有一份,让这份内存在不同的进程中,映射到各自的虚拟地址空间上,每个进程都可以读取同一份数据,是一种最高效的数据交换方法.下面我们就讨论如何实现它. 共享内存在 W

进程间通讯与同步的实现

进程通讯 内存共享 A进程创建共享区 shmget(-) 映射内存共享区 shmat(-) B进程通过key找到共享区 映射内存共享区 进程间通讯 撤销各自的内存映射 shmdt() 删除共享区 shctl() 管道Pipe A进程与B进程进行相互通讯 需要建立两个管道 当A->B时,需要在A中write end 在B中read end:当写入满时,管道阻塞:当管道无东西看读时 同样阻塞: ***以下代码为Xcode上的实现 因为VS下不支持某些类库 *** // // main.c // Pi