首頁 >後端開發 >C++ >命名管道如何促進 Python 和 C# 中的進程間通訊?

命名管道如何促進 Python 和 C# 中的進程間通訊?

Linda Hamilton
Linda Hamilton原創
2025-01-14 12:46:15726瀏覽

How Can Named Pipes Facilitate Interprocess Communication in Python and C#?

使用命名管道的簡單 IPC 測試應用程式

命名管道提供了一種強大的進程間通訊(IPC)方法,可以在不同程式之間實現高效的資料交換。 此範例演示了一個基本的測試應用程序,其中一個進程發送訊息並接收回應。

Python 實作

Python 程式碼使用 multiprocessing 模組建立發送方和接收方進程。

寄件者流程:

<code class="language-python">import multiprocessing

def sender():
    pipe_in, pipe_out = multiprocessing.Pipe()
    p = multiprocessing.Process(target=receiver, args=(pipe_in,))
    p.start()
    pipe_out.send("Hello from Python")
    p.join()
</code>

接收進程:

<code class="language-python">def receiver(pipe_in):
    message = pipe_in.recv()
    print(message)  # Output: Hello from Python
    pipe_in.send("Acknowledged from Python")</code>

C# 實作

C# 程式碼利用命名管道客戶端和伺服器流來實現 IPC 機制。

<code class="language-csharp">using System;
using System.IO;
using System.IO.Pipes;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        StartServer();
        Task.Delay(1000).Wait(); // Allow server to start

        // Client
        using (var client = new NamedPipeClientStream("PipesOfPeace"))
        {
            client.Connect();
            using (StreamWriter writer = new StreamWriter(client))
            {
                writer.WriteLine("Hello from C#");
                writer.Flush();
            }

            using (StreamReader reader = new StreamReader(client))
            {
                string response = reader.ReadLine(); // Reads "Acknowledged from C#"
                Console.WriteLine(response);
            }
        }
    }

    static void StartServer()
    {
        Task.Factory.StartNew(() =>
        {
            using (var server = new NamedPipeServerStream("PipesOfPeace"))
            {
                server.WaitForConnection();
                using (StreamReader reader = new StreamReader(server))
                {
                    string message = reader.ReadLine(); // Reads "Hello from C#"
                    Console.WriteLine(message);
                }

                using (StreamWriter writer = new StreamWriter(server))
                {
                    writer.WriteLine("Acknowledged from C#");
                    writer.Flush();
                }
            }
        });
    }
}</code>

兩個範例都示範了使用命名管道進行進程間通訊的基本原理。 發送、接收訊息並發迴回應,展示了一個簡單而有效的 IPC 解決方案。

以上是命名管道如何促進 Python 和 C# 中的進程間通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn