码迷,mamicode.com
首页 > 其他好文 > 详细

pipe和queue.py

时间:2020-01-19 00:31:47      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:record   map   加锁   imp   cti   ssi   proc   lock   inpu   

"""
multiprocessing提供了threading包中没有的IPC(进程间通信),效率上更高。应优先考虑Pipe和Queue,避免使用Lock/Event/Semaphore/Condition等同步方式(因为它们占据的不是用户进程的资源)。
multiprocessing包中有Pipe类和Queue类来分别支持这两种IPC机制。Pipe和Queue可以用来传送常见的对象。
①Pip可以是单向(half-duplex),也可以是双向(duplex)。我们通过mutiprocessing.Pipe
(duplex=False)创建单向管道(默认为双向)。一个进程从pipe一端输入对象,然后被 pipe另一端的进程接收。单向管道只允许管道一端的进程输入,而双向管道则允许从两端输入。
"""
import multiprocessing
def proc1(pipe):
pipe.send("hello")
print("proc1 rec:",pipe.recv())

def proc2(pipe):
print("proc2 rec:",pipe.recv())
pipe.send("hello,too")

if __name__ == ‘__main__‘:
multiprocessing.freeze_support()
pipe = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=proc1,args=(pipe[0],))
p2 = multiprocessing.Process(target=proc2,args=(pipe[1],))
p1.start()
p2.start()
p1.join()
p2.join()

"""
这里的pipe是双向的。pipe对象建立的时候,返回一个含有两个元素的表,每个元素代表pipe的一端(Connection对象)。我们对pipe的某一端调用send0方法来传送对象,在另一端使用recv)来接收。
②Queue类与Pipe相类似,都是先进先出结构。但Queue类允许多个进程放入,多个进程从队列取出对象。Queue类使用Queue(maxsize)创建,maxsize表示队列中可以存放对象的最大数量。
"""

import multiprocessing
import os,time
def inputQ(queue):
info = str(os.getpid()) + ‘(put):‘ + str(time.time())
queue.put(info)

def outputQ(queue,lock):
info = queue.get()
lock.acquire()
print((str(os.getpid()) + ‘(get):‘ + info))
lock.release()

if __name__ == ‘__main__‘:
record1 = []
record2 = []
lock = multiprocessing.Lock() # 加锁为防止散乱的打印
queue = multiprocessing.Queue(3)
for i in range(10):
process = multiprocessing.Process(target=inputQ,args=(queue,))
process.start()
record1.append(process)
for i in range(10):
process = multiprocessing.Process(target=outputQ,args=(queue,lock))
process.start()
record2.append(process)
for p in record1:
p.join()

queue.close() #没有更多的时间表、关闭queue
for p in record2:
p.join()

pipe和queue.py

标签:record   map   加锁   imp   cti   ssi   proc   lock   inpu   

原文地址:https://www.cnblogs.com/zhang-da/p/12210537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!