繁体   English   中英

返回multiprocessing.Pipe()的值

[英]return values of multiprocessing.Pipe()

我正在尝试了解使用multiprocessing.Pipe来传达两个过程的正确方法。 我想出了下面的代码,它似乎可以工作:

import multiprocessing

def f(parent_conn, child_conn):
    parent_conn.close()
    while True:
        cmd, data = child_conn.recv()
        if cmd == "f1":
            child_conn.send("f1!")
        elif cmd == "f2":
            child_conn.send("f2!")
        else:
            raise NotImplementedError

if __name__ == "__main__":
    parent_conn, child_conn = multiprocessing.Pipe()
    p = multiprocessing.Process(target=f, args=(parent_conn, child_conn))
    p.start()

    child_conn.close()
    parent_conn.send(("f1", None))
    parent_conn.send(("f2", None))
    print(parent_conn.recv())
    print(parent_conn.recv())

但是我不清楚parent_connchild_conn到底是什么意思,为什么我必须调用child_conn.close()parent_conn.close() (假设首先关闭这些连接是正确的)。 什么是parent_connchild_conn 我的代码是否包含任何错误或不良做法?

究竟是parent_conn和child_conn

它们是连接到管道不同端的连接对象

管道是通信通道。

如果一个进程持有这些对象之一,而另一个进程持有另一个,则它们可以使用这些连接对象的sendrecv方法相互通信。

如果某个进程具有可用的管道的两端,则可能要关闭将不使用的一端。 这可能是一个好主意,这样做,因为那是不可能发生的是两个不同的过程会尝试写入或从同一个管端读取(可能有描述一些不那么令人愉快的后果这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM