python多进程间通信_Python 多进程编程之 进程间的通信(Queue)

Python 多进程编程之 进程间的通信(Queue)

1,进程间通信

Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法

----这是操作系统开辟的一个空间,可以让各个子进程把信息放到Queue中,也可以把自己需要的信息取走

----这就相当于系统给python开辟了一个聊天室,让python创建的子进程可以在这个聊天室里畅所欲言

----一个进程可以放多条消息到Queue中

2,实例

#导入Queue,Process

from multiprocessing import Queue,Process

import os

#写入进程

def wp(q):

print("%s开始写入:"%os.getpid)

for i in "WANG":

#将信息写入队列

q.put(i)

print(i)

#读取进程

def rd(q):

print("%s开始读取"%os.getpid())

while True:

if not q.empty():

#从队列读取信息

print("read to %s"%q.get())

if __name__=="__main__":

#创建队列

q = Queue()

#创建写入进程

w = Process(target=wp,args=(q,))

#启动写入进程

w.start()

#创建读取进程

r = Process(target=rd,args=(q,))

#启动读取进程

r.start()

3,执行结果

1265开始读取

开始写入:

W

A

N

G

read to W

read to A

read to N

read to G

4,进程间通信常用函数

q.Queue()

--------------------------------------------------------

def __init__(self, maxsize=-1):

self._maxsize = maxsize

---- maxsize=-1,表示队列个数无穷大

---- 初始化Queue对象时,(例,q=Queue() )

或括号中没有指定最大可接收的消息数量,或数量为负值,

那么就表示可接收的消息数量没有上限

q.put("信息")

---------------------------------

将信息放入队列中

def put(self, obj, block=True, timeout=None):

pass

obj----传入的信息

block=True----阻塞=真 : 真阻塞(默认值)

timeout=None----等待时间,None(默认值)表示无限等待, 如果timeou设置值,则会等待N秒后,强制放入(put)

q.get()

----------------------------------

def get(self, block=True, timeout=None):

pass

从队列中拿出一个进程消息

block=True 默认值是真阻塞,

timeout=None 意思是  无限,无穷

两个合在一起的意思是  无限阻塞,无穷等待

队列的特点是:先进先出 所以get拿的顺序也是,先进先出 first in first out

q.put_nowait()

-------------------------------------

def put_nowait(self, obj):

pass

相当于q.put(obj,False)

不等待,直接放入

q.get_nowait()

----------------------------------------

def get_nowait(self):

pass

不做等待,就是要获取

如果队列中没有消息,就会报错

----解决报错,加入try 异常处理

q.qsize()

------------------------------------

def qsize(self):

return 0

返回当前队列包含的消息数量

q.full()

------------------------------

检测队列是否已经满了

True: 满

False: 未满

q.empty()

---------------------------------

def empty(self):

return False

检测队列是否为空

True:空

False:未空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值