使用 IPC 在 Python 和 C# 之间进行通信的最简单方法?

Posted

技术标签:

【中文标题】使用 IPC 在 Python 和 C# 之间进行通信的最简单方法?【英文标题】:Simplest way to communicate between Python and C# using IPC? 【发布时间】:2014-04-29 20:42:10 【问题描述】:

我有一些 C# 代码需要调用 Python 脚本数千次,每次都传递一个字符串,然后期望返回一个浮点数。 python 脚本可以使用任何版本的 Python 运行,所以我不能使用 Iron python。建议我使用 IPC 命名管道。我对此没有经验,并且无法弄清楚如何在 C# 和 Python 之间执行此操作。这是一个简单的过程,还是我正在寻找大量的工作?这是解决我的问题的最佳方法吗?

【问题讨论】:

标准输入/标准输出是否足够快?我希望这是一个很好的方法。 这就是我现在使用的。我需要提高速度。 【参考方案1】:

使用 zeromq。

无需代理即可实现非常轻松的消息传递 适用于许多平台 可以通过 TCP 套接字、unix 套接字或进程内部进行通信

这是我使用 zeromq https://***.com/a/23227631/346478 的答案

它用于不同 Python 程序之间的消息传递,但完全相同的通信方法可以在其他平台之间使用。只需保持传递的消息可互操作 - 双方都必须正确理解内容。您可以使用二进制数据,但 json 表示通常也可以快速轻松地工作。但是有许多序列化框架,例如结果缓冲区等,它们可能会帮助您对结果进行编码。

【讨论】:

这可能是一个很好的解决方案,但可能会产生安全隐患,因为您正在绑定到一个 tcp 端口。除非你真的想通过网络直播,否则至少要限制在 localhost。 @user3490130 关于速度,请为真正的速度做好准备。每秒数万条消息,对于较小的消息,它通常优于 TCP,因为它将多条消息管理到一个 TCP 数据包中(取决于实际使用场景)。 这个编码领域的新手。您能否简要解释一下在 c# 方面需要什么才能使其正常工作? @user3490130 用于 C# 绑定,请参阅:github.com/zeromq/clrzmq 另外页面 zeromq.org 通常是 zeromq 的一个很好的起点 - 它写得很好 - 你会经常笑。 @user3490130 如果你有一些 Python 经验,我建议你开始用 Python 做实验,它应该更具交互性和简单性。除了一般的 ZMQ 指南,您还可以在 github.com/zeromq/pyzmq/tree/master/examples 找到很棒的(功能性和简短的)示例【参考方案2】:

根据您所说的,您可以连接到python进程并捕获标准输出文本。简单、快速、可靠!

【讨论】:

以上是关于使用 IPC 在 Python 和 C# 之间进行通信的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

我应该在同一台机器上运行的 Firefox 扩展和 C# 代码之间使用哪种 IPC 方法?

在长时间运行的 c 进程和 python 之间进行双向 IPC 的最佳方法是啥?

在 Java 应用程序和基于 C# 的插件之间建立 IPC 链接

C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC

C# 中 UI 线程和子进程之间的低延迟 IPC [关闭]