Queue队列
from multiprocessing import Process, Queue
class MyProcessGet(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessGet, self).__init__(*args, **kwargs)
def run(self):
while 1:
print("MyProcessGet recv: ", self.q.get())
self.q.put(random.randrange(0, 100))
class MyProcessPut(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessPut, self).__init__(*args, **kwargs)
def run(self):
while 1:
self.q.put(random.randrange(0, 100))
print("MyProcessPut recv: ", self.q.get())
if __name__ == '__main__':
queue = Queue()
p1 = MyProcessGet("zhangzhi", queue)
p2 = MyProcessPut("lisi", queue)
p1.start()
p2.start()
注意:
线程队列使用 from queue import Queue
进程队列使用 from multiprocessing import Queue
PIPE管道
from multiprocessing import Process, Pipe
class MyProcessGet(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessGet, self).__init__(*args, **kwargs)
def run(self):
while 1:
print("MyProcessGet recv: ", self.q.recv())
self.q.send(random.randrange(0, 100))
class MyProcessPut(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessPut, self).__init__(*args, **kwargs)
def run(self):
while 1:
self.q.send(random.randrange(0, 100))
print("MyProcessPut recv: ", self.q.recv())
if __name__ == '__main__':
parent_conn, child_conn = Pipe(True)
p1 = MyProcessGet("zhangzhi", parent_conn)
p2 = MyProcessPut("lisi", child_conn)
p1.start()
p2.start()
注意的点是:
好多人说pipe最多支持两个进程,因为pipe实例化出来的有两个入口,一个收一个发,但是经我验证情况不是这样的,下面上代码看结果:
from multiprocessing import Process, Pipe
class MyProcessGet(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessGet, self).__init__(*args, **kwargs)
def run(self):
while 1:
print("MyProcessGet recv: ", self.q.recv())
self.q.send(random.randrange(0, 100))
class MyProcessPut(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessPut, self).__init__(*args, **kwargs)
def run(self):
while 1:
self.q.send(random.randrange(0, 100))
print("MyProcessPut recv: ", self.q.recv())
class MyProcessThird(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessThird, self).__init__(*args, **kwargs)
def run(self):
while 1:
self.q.send(random.randrange(0, 100))
print("MyProcessThird recv: ", self.q.recv())
class MyProcessFour(Process):
def __init__(self, a, q, *args, **kwargs):
self.a = a
self.q = q
super(MyProcessFour, self).__init__(*args, **kwargs)
def run(self):
while 1:
print("MyProcessFour recv: ", self.q.recv())
self.q.send(random.randrange(0, 100))
if __name__ == '__main__':
parent_conn, child_conn = Pipe(True)
p1 = MyProcessGet("zhangzhi", parent_conn)
p2 = MyProcessPut("lisi", child_conn)
p3 = MyProcessThird("Third", parent_conn)
p4 = MyProcessFour("Four", child_conn)
p1.start()
p2.start()
p3.start()
p4.start()
运行结果:
MyProcessGet recv: 39
MyProcessThird recv: 80
MyProcessPut recv: 35
MyProcessFour recv: 65
MyProcessGet recv: 89
MyProcessThird recv: 25
MyProcessPut recv: 69
MyProcessFour recv: 97
MyProcessGet recv: 70
MyProcessThird recv: 43
486

被折叠的 条评论
为什么被折叠?



