You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多进程通信中能否创建多个Pipe?附代码问题求助

多进程中创建多个Pipe通信管道完全可行

当然可以在多进程场景下创建多个独立的Pipe通信管道,每个管道对应一对进程间的专属通信通道,彼此互不干扰,完全满足你说的car与car2、plane与plane2分别通信的需求。

你的代码出现错误的核心原因有两个:

  • 定义test和main函数时只声明了一个connection参数,但启动进程时传递了两个管道对象,导致参数不匹配
  • 管道两端的引用有误(比如代码里写了plane2,但实际创建的是plane1)

修正后的代码示例

from time import sleep
from random import random
from multiprocessing import Process
from multiprocessing import Pipe

# 发送端:同时通过两个管道发送数据
def test(car_conn, plane_conn):
    print('Sender: Running', flush=True)
    # 给car管道发送数据
    for i in range(5):
        value = random()
        sleep(value)
        car_conn.send(f"car_data_{value:.2f}")
    car_conn.send(None)
    
    # 给plane管道发送数据
    for i in range(5):
        value = random()
        sleep(value)
        plane_conn.send(f"plane_data_{value:.2f}")
    plane_conn.send(None)
    
    print('Sender: Done', flush=True)

# 接收端:同时监听两个管道的数据
def main(car_conn, plane_conn):
    print('Receiver: Running', flush=True)
    
    # 处理car管道的接收
    print("--- 开始接收car管道数据 ---")
    while True:
        item = car_conn.recv()
        print(f'>car receiver got {item}', flush=True)
        if item is None:
            break
    
    # 处理plane管道的接收
    print("--- 开始接收plane管道数据 ---")
    while True:
        item = plane_conn.recv()
        print(f'>plane receiver got {item}', flush=True)
        if item is None:
            break
    
    print('Receiver: Done', flush=True)

if __name__ == '__main__':
    # 创建两个独立的管道
    car_main, car_test = Pipe()
    plane_main, plane_test = Pipe()
    
    # 启动发送进程:传入test端的两个管道连接
    sender_process = Process(target=test, args=(car_test, plane_test))
    sender_process.start()
    
    # 启动接收进程:传入main端的两个管道连接
    receiver_process = Process(target=main, args=(car_main, plane_main))
    receiver_process.start()
    
    # 等待进程结束
    sender_process.join()
    receiver_process.join()

关键说明

  • 每个Pipe创建后会返回一对连接对象,一端给发送进程,另一端给接收进程,要确保对应关系正确
  • 函数参数要和启动进程时传递的参数数量一致,比如需要处理两个管道就定义两个参数
  • 可以分别对每个管道的收发逻辑单独处理,彼此完全独立

内容的提问来源于stack exchange,提问作者Chi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:26:02