Pipe(([duplex])
Pipe类用于创建两个对象(con1,con2),这两个端口一个用于发送,一个用于接收
当可选参数双工duplex为TRUE时,当然这是默认的,不区分特定发送端口与接收端口,
但当duplex为False时,con1只能用来接收,而con2只能用来发送
实例化的Pipe对象拥有connetion下的方法,以下为一些常用方法:
send(obj) #发送数据
recv() #接收数据
poll([timeout]) #查看缓冲区是否有数据,可设置时间,如果timeout为None,则会无限超时
send_bytes
(buffer[, offset[, size]]) #发送二进制字节数据
recv_bytes
([maxlength]) #接收二进制字节数据
一个简单的栗子:
from multiprocessing import Pipe a,b = Pipe(True) a.send("儿子啊,我是你子欲养而亲不待的亲妈啊!") print(b.recv()) a,b = Pipe(False) a.send("儿子啊,我是你子欲养而亲不待的亲妈啊!") print(b.recv())
output:
Queue
Queue类下有以下主要方法:
empty(),full() #返回布尔值,真为空,满
put
(obj[, block[, timeout]]) #塞入数据,block:true,timeout:None,持续阻塞,直到有可用的空槽,timeout可以为正值,在这段时间内依然没有可用空槽,就抛出full异常
get
([block[, timeout]]) #获取数据,道理同put,但后面这种情况举出的是empty异常
put_nowait() = put(obj,False)
get_nowait() = get(False)
close() #关闭队列,不能再有数据添加进来,垃圾回收机制启动时自动调用
from multiprocessing import Queue from multiprocessing import Process import time def f1(q): for i in range(100): print('f1 送福利啦! %s'%i) q.put(i) time.sleep(0.5) def f2(q): while 1: print('f2收福利啦!%s'%q.get()) time.sleep(0.5) if __name__ == "__main__": q = Queue() p1 = Process(target=f1,args=(q,)) p2 = Process(target=f2,args=(q,)) p1.start() p2.start() p1.join() time.sleep(2) p2.terminate()
Windows下看不到运行结果,输出以后再补上!