美文网首页
multiprocessing中Pipe与Queue

multiprocessing中Pipe与Queue

作者: 编程半岛 | 来源:发表于2018-05-23 11:12 被阅读446次

前言:在学习python3多进程时,多进程模块multiprocessing提供了PipeQueue两种方式进行进程间通信。实验过程中发现一个有趣现象,如实验一Pipe实验所示:其输出结果的顺序也是先进先出,这个也是Queue的原理,那么PipeQueue之间有什么区别?它们使用的场合分别是哪些?

实验一: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()用于用于多个(两个及其以上)间的进程通信。

相关文章

网友评论

      本文标题:multiprocessing中Pipe与Queue

      本文链接:https://www.haomeiwen.com/subject/fowljftx.html