C#WPF应用程序和python脚本之间的双向通信

时间:2019-04-25 14:59:04

标签: c# python wpf zeromq netmq

我正在尝试在c#应用程序和c#将调用的python脚本之间进行双向通信。

我在C#中有一些输入通道,以较高的频率(5000-1000数据/秒)不断变化,比如说一分钟。这些输入的每次更改都会计算结果并将其分配给输出变量。我正在尝试将逻辑移至python脚本。例如:

  • 输入:x,y的两倍
  • 输出:双z

因此pyhton脚本应该能够以对称的频率读取输入,执行逻辑并写入结果。

有什么建议吗?有人做过类似的事情吗?

首先,我尝试在每次更改时调用脚本并读取控制台输出。但是脚本中的代码并不像z = x * y那么简单,并且在pyhon脚本中需要存储值的变量。例如,脚本可能要保存达到的x和y的最大值。

我看了一下ZeroMQ库进行通信,虽然不确定如何使用它。

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

简单的C#程序:发送和接收数据的客户端

using System;
using ZeroMQ;

namespace ZeroMQ_Client
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var requester = new ZSocket(ZSocketType.REQ))
            {
                // Connect
                requester.Connect("tcp://127.0.0.1:5555");

                for (int n = 0; n < 10; ++n)
                {
                    string requestText = "Hello";
                    Console.Write("Sending {0}...", requestText);

                    // Send
                    requester.Send(new ZFrame(requestText));

                    // Receive
                    using (ZFrame reply = requester.ReceiveFrame())
                    {
                        Console.WriteLine(" Received: {0} {1}!", requestText, reply.ReadString());
                    }
                }
            }
        }
    }
}

python程序,您必须安装pyzmq:

#
#   Hello World server in Python
#   Binds REP socket to tcp://*:5555
#   Expects b"Hello" from client, replies with b"World"
#

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print("Received request: %s" % message)

    #  Do some 'work'
    time.sleep(1)

    #  Send reply back to client
    socket.send(b"World")