前言:在学习python3多进程时,多进程模块multiprocessing
提供了Pipe
和Queue
两种方式进行进程间通信。实验过程中发现一个有趣现象,如实验一Pipe
实验所示:其输出结果的顺序也是先进先出,这个也是Queue
的原理,那么Pipe
和Queue
之间有什么区别?它们使用的场合分别是哪些?
实验一:Pipe
实验:
from multiprocessing import Process, Pipe
conn1, conn2 = Pipe()
def f1():
for i in range(10):
conn1.send(i)
def f2():
for i in range(10):
print(conn2.recv())
def main():
Process(target=f1).start()
Process(target=f2).start()
if __name__ == '__main__':
main()
输出结果:
0
1
2
3
4
5
6
7
8
9
实验二:Queue
实验:
from multiprocessing import Process, Queue
queue = Queue()
def f1():
for i in range(10):
queue.put(i)
def f2():
for i in range(10):
print(queue.get())
def main():
Process(target=f1).start()
Process(target=f2).start()
if __name__ == '__main__':
main()
输出结果:
0
1
2
3
4
5
6
7
8
9
详情可参照官方文档:
For passing messages one can use Pipe() (for a connection between two processes) or a Queue() (which allows multiple producers and consumers).
简单点说就是:Pipe()
用于两个进程通信,Queue()
用于用于多个(两个及其以上)间的进程通信。
网友评论