我正在尝试在c#应用程序和c#将调用的python脚本之间进行双向通信。
我在C#中有一些输入通道,以较高的频率(5000-1000数据/秒)不断变化,比如说一分钟。这些输入的每次更改都会计算结果并将其分配给输出变量。我正在尝试将逻辑移至python脚本。例如:
因此pyhton脚本应该能够以对称的频率读取输入,执行逻辑并写入结果。
有什么建议吗?有人做过类似的事情吗?
首先,我尝试在每次更改时调用脚本并读取控制台输出。但是脚本中的代码并不像z = x * y那么简单,并且在pyhon脚本中需要存储值的变量。例如,脚本可能要保存达到的x和y的最大值。
我看了一下ZeroMQ库进行通信,虽然不确定如何使用它。
答案 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")