如何使用Python.Net与ZeroMQ或其他工具将Python包公开给C#

如何使用Python.Net与ZeroMQ或其他工具将Python包公开给C#,c#,python,zeromq,ffi,python.net,distributed-computing,C#,Python,Zeromq,Ffi,Python.net,Distributed Computing,我正在开发一个用Python3编写的应用程序,它由一个Python库/包(包含核心功能)和一个Python应用程序组成,Python应用程序将提供一个clishell并处理用户命令 此外,Python包中包含的功能必须公开给用C#(使用Microsoft.Net framework)编写的现有gui应用程序 我对如何实现这一点做了大量的研究,并提出了一些可能的解决方案 用于在导入Python包并调用所需方法/属性的C#应用程序中实现Python脚本。我自己还没有能够在monodevelop上实现

我正在开发一个用Python3编写的应用程序,它由一个Python库/包(包含核心功能)和一个Python应用程序组成,Python应用程序将提供一个clishell并处理用户命令

此外,Python包中包含的功能必须公开给用C#(使用Microsoft.Net framework)编写的现有gui应用程序

我对如何实现这一点做了大量的研究,并提出了一些可能的解决方案

  • 用于在导入Python包并调用所需方法/属性的C#应用程序中实现Python脚本。我自己还没有能够在monodevelop上实现这一点,但这似乎是一个流行的选择,尽管没有太多关于我的用例的文档
  • 使用将我的Python库嵌入为DLL。这个选项似乎不需要做很多工作,但很难看到我如何维护我的接口/我向使用C#中DLL的人公开了什么。很多关于我的用例的文档似乎也不支持这个选项
  • 创建一个小型Python应用程序,该应用程序导入我的Python包并通过或公开其功能。这似乎是最灵活的选项,有足够的文档,但是我担心延迟,因为最终这个工具用于硬件控制
  • 注意:我对C不太精通,并且将在linux中完成大部分开发工作


    我真的很想得到关于哪个选项可以在我的库的干净界面和低延迟/良好性能之间提供最佳平衡的反馈(重点放在后面).

    您说您的python应用程序有一个cli,因此另一个可能的选择是让您的C#应用程序通过命令行与python应用程序交互

    您需要通过命令行参数公开python功能(您可能已经在这样做了),并且python应用程序需要能够将结果作为json数据返回,这可能是从C#使用它的最简单方法

    这完全取决于您的C#gui和python应用程序之间的交互需要有多复杂。

    对于
    SuT
    -稳定性,目标是
    ~10[ms]下的延迟?
    感谢您提供关于延迟上限范围相当广泛的详细信息。。100[ms]

    +

    …这实际上是取代了以前在C中实现的东西。其想法是,如果库的接口层和cli是用Python实现的,那么用户将更容易构建其用例的核心功能。一些要求更高的控制循环可能必须实现为静态C库或rust库,我们将使用python调用这些库。在任何情况下,顶层仍然是用Python实现的,它必须与C#
    接口(=这里最重要的收获…
    需要了解
    这两个方面的成本
    用户希望易于扩展和重构体系结构
    +
    谁来支付这些成本


    在我们开始搜索解决方案之前: 为了安全和专业地完成这项工作,您很可能希望不要重复未经告知的决策的常见错误,一般评论来源于大量第一手经验,这些经验是在
    ~80[us]
    下制作一个带有控制回路的系统

    映射您控制系统-内部生态系统(资源)和外部系统
    (与外部世界的互动)

    接下来是架构: 如果对玩具没有足够的了解,没有人能够决定合适的架构

    了解a中设备的情况需要我们首先知道(读取+测试+基准测试以及sSystem-under-Test的(过载)条件下的抖动/漂移包络线)。不知道这会导致一种盲目的、没有事实支持的信念,我们的SuT永远不会头破血流,这将证明自己是错误的,通常是在最不愉快的时刻

    不可逆转的错误和坏习惯,因为到目前为止所有应计成本都已被烧毁

    在勾画架构之前,了解和测试是一个核心步骤,其中细节很重要(
    h2d/d2h
    延迟
    [us]中有多大损失)
    -为什么这些主要成本的报告如此之弱?这是否意味着这些成本不存在?不。它们确实存在,并且您的控制回路每次都会支付这些成本…因此更好地了解所有这些隐藏的成本,在
    时域中支付,
    ,提前……得到设计和起草。)


    毫不犹豫地分发(在合理的情况下): 向美国宇航局阿波罗任务设计学习
    -它被深入传播

    -适当的工程帮助人们登上月球
    -它拯救了第一批,也是迄今为止唯一的外星人的民族自豪感和生命
    (归功于’s智慧,她定义了她的设计规则,并改变了许多控制回路系统协调策略的正确工程思想)

    或者(
    zmq
    ,是一个成熟的、可组合的、可扩展的、主要分布在多对多上的体系结构,在一组简单的、可扩展的正式通信模式原型之上开发)或者是Marting SUSTRIK,她是一个较年轻、体重较轻的妹妹,可能对构建一个智能宏观系统有很大帮助,在这个智能宏观系统中,单个组件的优势(或hav的垄断地位)将发挥作用