簡體   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