Двусторонняя связь между приложением C # WPF и скриптом Python - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь установить двустороннюю связь между приложением ac # и скриптом python, который будет вызывать c #.

У меня есть несколько входных каналов в c #, которые постоянно меняются на высокой частоте (5000-1000 данных / с), скажем, минуту.При каждом изменении этих входных данных результаты вычисляются и присваиваются выходным переменным.То, что я пытаюсь сделать, это переместить логику в скрипт Python.Например:

  • Входные данные: double x, y
  • Выходные данные: double z

Таким образом, сценарий pyhton должен быть способен читать входные данные, выполнятьлогику и запишите результаты с симиларной частотой.

Есть рекомендации?Кто-нибудь делал что-нибудь подобное раньше?

Сначала я пытался вызывать скрипт при каждом изменении и читать вывод консоли.Но код в скрипте не так прост, как z = x * y, и переменные, в которых хранятся значения, требуются в скрипте pyhon.Например, сценарий должен сохранить максимальное значение x и y.

Я заглянул в библиотеку ZeroMQ для связи, хотя не знал, как ее использовать.

1 Ответ

1 голос
/ 25 апреля 2019

Вот решение:

Простая программа на 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")
...