请问 C#应用和 Python 服务之间有什么高效联通的方法吗

241 天前
 crokily

自己是学前后端开发的,所以不太懂桌面应用的开发,不同语言的代码之间要怎么连在一起使用

目前在开发一个简单的 WIN 端自用 AI 程序,因为大部分 AI 库都是 Python 的,所以就用 Python 写好了 AI 部分的功能逻辑。

然后 UI 想用 C#的 WINUI 库来开发,按前后端的思路就是启动个 python 后端,前端发 HTTP 请求。

但是桌面应用这么弄的话就感觉很丑陋,还单独启动个后端发请求,双方明明都在本地,应该会有更高效的方式才对。

问了下 AI ,说有 3 个方法,

1 个就是前后端那样发 0.0.0.0 的 HTTP 请求,

还有用不同语言兼容的库,什么.net 的 python 库 Ironpython 啥的,

还有说用 (IPC) 机制使用 命名管道 (Named Pipes)啥的。

但我并不知道哪个是业内常用的较好的手段,想请教一下各位。谢谢!

1487 次点击
所在节点    问与答
19 条回复
wangritian
241 天前
go 语言中我用 cgo 启动 cPython 解释器直接执行过 python 代码,c#应该有类似的操作或者开源库吧
uqf0663
241 天前
如果是我,我选发 http 请求或者 ws 也行,不觉得丑陋,反而是如果接口设计得当,以后更换技术栈或者再融入更多语言进来会非常方便。
glcolof
241 天前
知乎上好像有大佬讨论过,同一台设备上,TCP 通信的效率与直接复制内存差不了多少。有需要的时候还能轻松的把后端部署到其它设备上,所以推荐用 TCP 。
OP 可以去知乎上找找看。
fgwmlhdkkkw
241 天前
ferock
241 天前
很多办法,

1. rpc 通讯
2. websocket 通讯
3. 第三方成熟协议,比如 redis 协议通讯
4. 本地文件


别说跨语言了,通语言跨进程不也一样蛋疼?
sujin190
241 天前
用命名管道呗
nananqujava
241 天前
http 通信是最好的,谁说丑陋?
nananqujava
241 天前
补充一下就像三楼说的,同一台机器上延迟,可以忽略不计,而且还有扩展性部署到其他的机器上
HFX3389
241 天前
本地应用 http 通信丑陋吗...
我记得 IDE 的一些插件甚至 IDE 本身的登录都是开本地端口然后让浏览器访问的呀。
xyfan
241 天前
HTTP 挺好,以后还能前后端分离,运算放在家里的主机上,界面放在笔记本电脑上带着走。
julyclyde
241 天前
难道不是 AI 计算那段占据了大部分耗时吗?
你优化通讯这部分有啥用?
crokily
241 天前
@uqf0663
@glcolof
@nananqujava
@julyclyde
@xyfan
@HFX3389
感谢指出,之前错误认为“丑陋”的原因主要是:
1. 通信开销:之前担心这样会有多余的通信开销,但现在已经知道了本机 TCP 通信效率与直接内存差不多。
2. 体积问题:担心要打包 Python 环境、依赖库和 Flask 这些,一个小工具会变得很臃肿
3. 没有分布式的需求:完全是本机运行,因为只是一个自用的小工具,划词总结分析翻译这样,后端的逻辑就是用了 langchain 写的调模型整合多 agents 来用,没有太多要处理的运算/数据之类的,所以也就不具备单独作为服务端来放在远程处理运算的需求。

目前因为 1 已经解惑了,所以没有耗时上的顾虑,但因为 2 和 3 ,所以打算使用类似 1 楼提出的方案,用 Pythonnet 这样的库直接启动 CPython 解释器执行 python 代码,看起来最轻量级最简单。
SenLief
241 天前
我觉得直接 http 最经济,前端都不用写桌面 ui 直接浏览器算了。
crokily
240 天前
@SenLief 桌面端应用,需要截图操作,划词翻译等等,浏览器不太方便
hippieZhou
234 天前
我之前的项目采用 WPF+Python 多前后端混合模式,用的是 MQ 来进行通信的
forgottencoast
58 天前
@hippieZhou
请问有考虑过采用 Python.NET 吗?
hippieZhou
58 天前
@forgottencoast 因为我们当时项目中 python 相关的实现有一些特定的依赖,并且团队中大多数都是写 python ,不会.NET ,所以就没考虑这种框架
forgottencoast
58 天前
@hippieZhou
我看你前面说 WPF+Python ,所以以为 WPF 是你们写的,这么说来 WPF 是另外一个团队在写?
hippieZhou
58 天前
@forgottencoast 是我和另一位同事负责 WPF ,然后对接另一个团队几个人写的 python 服务

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1104408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX