如何使用Python.Net与ZeroMQ或其他工具将Python包公开给C#
我正在开发一个用Python3编写的应用程序,它由一个Python库/包(包含核心功能)和一个Python应用程序组成,Python应用程序将提供一个clishell并处理用户命令 此外,Python包中包含的功能必须公开给用C#(使用Microsoft.Net framework)编写的现有gui应用程序 我对如何实现这一点做了大量的研究,并提出了一些可能的解决方案如何使用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上实现
我真的很想得到关于哪个选项可以在我的库的干净界面和低延迟/良好性能之间提供最佳平衡的反馈(重点放在后面).您说您的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的垄断地位)将发挥作用