python通信原理_Python进程间通信(IPC):管道通信 Pipe/消息队列/共享内存/信号通信...

进程间通信(IPC)

产生原因:进程空间相对独立,资源无法相互获取,此时在不同进程间通信需要专门方法。

进程间通信方法:管道    消息队列    共享内存    信号    信号量    套接字

管道通信 Pipe

通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用"同一个"管道对象进行操作即可实现通信

pultiprocessing ---> Pipe

fd1,fd2 = Pipe(duplex = True)

功能: 创建管道

参数: 默认表示双向管道,如果设置为False则为单向管道

返回值:表示管道的两端,如果是双向管道,都可以读写,如果是单向管道 则fd1只读,fd2只写

fd.recv()

功能:从管道读取信息

返回值:读取到的内容

*如果管道为空则阻塞

fd.send(data)

功能:向管道写入内容

参数:要写入的内容

*可以发送python数据类型

消息队列

队列:先进先出

通信原理:在内存中建立队列数据结构模型。多个进程都可以通过队列存入内容,取出内容的顺序和存入顺序保持一致

创建队列:

q = Queue(maxsize = 0)

功能:创建消息队列

参数:表示最多存放多少消息。默认表示根据内存分配存储

返回值:队列对象

q.put(data,[block,timeout])

功能:向队列存储消息

参数:data 要存的内容

block 默认队列满时会阻塞,设置为False则非阻塞

timeout 超时时间

data = q.get([block,timeout])

功能:获取队列消息

参数:block 默认队列空时会阻塞,设置为False则非阻塞

timeout 超时时间

返回值:返回取出的内容

q.full()判断队列是否为满

q.empty()判断队列是否为空

q.qsize()判断队列中消息数量

q.close()关闭队列

共享内存

通信原理:在内存空开辟一块空间,对多个进程可见,进程可以写入输入,但是每次写入的内容会覆盖之前的内容。

obj = Value(ctype,obj)

功能: 开辟共享内存空间

参数 : ctype  要存储的数据类型

obj  共享内存的初始化数据

返回:共享内存对象

obj.value 即为共享内存值,对其修改即修改共享内存

obj = Array(ctype,obj)

功能 : 开辟共享内存空间

参数 : ctype  要存储的数据格式

obj  初始化存入的内容 比如列表,字符串

如果是整数则表示开辟空间的个数

返回值 : 返回共享内存对象

* 可以通过遍历过户每个元素的值

e.g.  [1,2,3]  ---> obj[1] == 2

* 如果存入的是字符串

obj.value 表示字符串的首地址

管道         消息队列       共享内存

开辟空间   内存         内存           内存

读写方式   两端读写     先进先出       覆盖之前内容

双向/单向

效率       一般          一般          较高

应用       多用于父     广泛灵活       需要注意

子进程                      进行互斥操作

信号通信

一个进程向另一个进程发送一个信号来传递某种讯息,接受者根据接收到的信号进行相应的行为

kill -l  查看系统信号

kill -sig PID  向一个进程发送信号

SIGHUP连接断开

SIGINTCTRL+C

SIGQUITCTRL+\

SIGTSTPCTRL+Z

SIGKILL终止一个进程

SIGSTOP暂停一个进程

SIGALRM时钟信号

SIGCHLD子进程状态改变时给父进程发出

python 发送信号

需要引入 signal 模块

os.kill(pid,sig)

功能: 发送信号

参数: pid 目标进程

sig 要发送的信号

如:os.kill(20959,signal.SIGKILL)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值