如何使用python .Net与ZeroMQ或其他将Python包公开给C# - c#

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

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

我已经对如何实现进行了大量研究,并提出了一些潜在的解决方案。

使用Python.Net在C#应用程序中实现Python脚本,该脚本导入我的python包并调用所需的方法/属性。我还不能自己在Monodevelop上进行这项工作,但这似乎是一个受欢迎的选择,尽管关于我的用例的文档很少。
使用CFFI将我的Python库作为DLL嵌入。这个选项似乎不需要很多工作,但是很难看到我将如何维护我的接口/我在使用C#中使用DLL的人身上所暴露的东西。与我的用例有关的许多文档似乎也不支持该选项。
创建一个小的Python应用程序,该应用程序导入我的python包并通过ZeroMQ或gRPC公开其功能。在文档充裕的情况下,这似乎是最灵活的选择,但是我担心延迟,因为该工具最终用于硬件控制。

注意我对C#并不熟悉,并且会在linux中进行大部分开发工作。

我真的希望获得有关哪个选项将在我的库的干净接口与低延迟/良好性能之间取得最佳平衡的反馈(稍后将重点介绍)。

参考方案

目标:~ 10 [ms]稳定性下在SuT下的延迟?

感谢您提供有关相当宽的延迟上限~ 10 .. 100 [ms] +的详细信息

  …实际上是在替代以前用C语言实现的东西。想法是,如果库的接口层和cli是用Python实现的,那么用户为他们的用例构建核心功能将更加容易。一些要求较高的控制循环可能必须实现为静态C库或rust库,而我们将使用python对其进行调用。无论如何,顶层仍然是在Python中实现的,它必须与C#交互(=从这里开始最重要的收获……需要同时了解这两个方面:希望简化用户扩展和重构架构的成本+谁付费这些费用)

在我们甚至开始搜索The Solution之前:

为了安全,专业地完成此任务,您很可能会喜欢this,而不是重复那些无知决策的常见错误,在这些常规错误中,一般性评论来自第一手经验,这些经验是在~ 80 [us]下制作带有控制环的系统的第一手经验

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

如何使用python .Net与ZeroMQ或其他将Python包公开给C# - c#

接下来是架构:

如果对玩具没有足够的了解,就没有人可以决定合适的建筑。

理解latency-motivated device中设备的状况要求我们首先了解(在被测系统的(超载)条件下,读取+测试+基准测试也是抖动/漂移包络)。不知道这会导致盲目的事实支持,我们的SuT将永远不会陷入the wall of reality,这通常在最不愉快的时刻证明自己是错误的。

不可逆的错误和不良做法,因为到目前为止所有应计费用都已被烧毁...

了解和测试是构架架构之前的核心步骤-在这里细节很重要(ref. h2d/d2h延迟[us]多少?–为什么这些主要成本的报告如此微弱?它们确实存在,并且您的控制循环每次都将向他们支付费用...因此,最好事先了解所有这些隐藏费用,这些费用由TimeDOMAIN支付... before Architecture进行设计并起草。)

不要犹豫,去分布式(合理地supported):

向NASA的阿波罗任务设计学习-分布广泛,并且适当的工程技术帮助到达月球-它既挽救了民族自豪感,也挽救了第一批也是迄今为止唯一的Extra Terrestrians的生命(归功于Ms.Margaret HAMILTON的定义她的设计规则并改变许多控制回路系统的协调策略的正确工程思想的智慧()

ZeroMQ(zmq是成熟,可组合,缩放良好的,主要分布于多对多behaviours的体系结构,是在一些琐碎的可扩展形式化通信模式原型的集合上开发的),或者是Marting SUSTRIK co父亲轻巧的妹妹nanomsg可以帮助人们组成一个智能的宏观系统,在这个宏观系统中,各个组成部分的优势(或无可替代的垄断)可能会相互联系,成为一种潜伏期-阈值stable, priority-aware macro-system,原则上不能(或出于某些其他原因而不想-成本节约,上市时间,法律约束力是第一阈值)设计一个整体的一个系统。

乍一看,这听起来似乎使问题变得复杂,但很快就会意识到,它确实正好相反:

在另一个重新发明的轮子上不燃烧燃料(是的,投资者的钱)。
当然,使用行业认可的工具通常可以提高可靠性,如果正确的话……
性能扩展可能是一个很好的副作用,而不是为时已晚,无法重构梦night

更不用说这些工具独立发展及其进一步扩展所带来的积极好处。

我的系统处于类似的困境中-#C并不是我的办法(封闭源应用程序依赖项对于我们的成功不是致命的,但代价太高)。

CLI:称为远程键盘是拆分第一个python的确切示例,在该示例中,可以将remote理解为跨大西洋键盘
ML:是城镇中延迟最少的元素,因此需要融合
core-App:使用行业标准的DLL扩展到distributed-computing系统中,而无需告知它(只有剥离的核心逻辑保留在原位,其他所有东西都被分发了,以便将所有控制回路的延迟,并让其处理不同级别的优先级)
非阻塞性加载项:已从核心应用程序卸载
core-App-(1 + N)-热待机阴影:引入到原始的单片C / S exo系统中

在这里,是否需要添加更多以使其更分布式并且独立于原始的供应商锁定?

选择了汗水,眼泪和鲜血-从ZeroMQ在成熟的v2.x时代开始,我很遗憾没有一个小时这样做,并且无法想象不这样做就能满足以上所有条件。

如何使用python flask从pandas数据框中获取下拉列表项? - python

我需要使用python flask将pandas数据帧中的数据添加到html文档的下拉列表中[email protected]('/api/v1/resources/getservices', methods=['GET']) def api_services(): return render_template('v…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

如何使用python Telegram Bot API将文件上传到Google驱动器 - python

我正在尝试将用户发送给我的机器人的文件上传到Google驱动器中。这是我的python代码#!/usr/bin/env python import os import telegram import logging from telegram.ext import Updater from telegram.ext import Updater, Comma…

python-docx应该在空单元格已满时返回空单元格 - python

我试图遍历文档中的所有表并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。我在类似的帖子中已经看过scanny提供的其他代码,但是由于某种原因,它并没有提供我正在解析的文档的预期输出可以在https://www.ontario.ca/laws/regulation/140300中找到该文档from docx import Document from…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…