自己是学前后端开发的,所以不太懂桌面应用的开发,不同语言的代码之间要怎么连在一起使用
目前在开发一个简单的 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)啥的。
但我并不知道哪个是业内常用的较好的手段,想请教一下各位。谢谢!
1
wangritian 9 天前 1
go 语言中我用 cgo 启动 cPython 解释器直接执行过 python 代码,c#应该有类似的操作或者开源库吧
|
2
uqf0663 9 天前 1
如果是我,我选发 http 请求或者 ws 也行,不觉得丑陋,反而是如果接口设计得当,以后更换技术栈或者再融入更多语言进来会非常方便。
|
3
glcolof 9 天前 1
知乎上好像有大佬讨论过,同一台设备上,TCP 通信的效率与直接复制内存差不了多少。有需要的时候还能轻松的把后端部署到其它设备上,所以推荐用 TCP 。
OP 可以去知乎上找找看。 |
5
ferock 9 天前 via iPhone
很多办法,
1. rpc 通讯 2. websocket 通讯 3. 第三方成熟协议,比如 redis 协议通讯 4. 本地文件 … 别说跨语言了,通语言跨进程不也一样蛋疼? |
6
sujin190 9 天前 via Android
用命名管道呗
|
7
nananqujava 9 天前 via Android
http 通信是最好的,谁说丑陋?
|
8
nananqujava 9 天前 via Android
补充一下就像三楼说的,同一台机器上延迟,可以忽略不计,而且还有扩展性部署到其他的机器上
|
9
HFX3389 8 天前
本地应用 http 通信丑陋吗...
我记得 IDE 的一些插件甚至 IDE 本身的登录都是开本地端口然后让浏览器访问的呀。 |
10
xyfan 8 天前
HTTP 挺好,以后还能前后端分离,运算放在家里的主机上,界面放在笔记本电脑上带着走。
|
11
julyclyde 8 天前
难道不是 AI 计算那段占据了大部分耗时吗?
你优化通讯这部分有啥用? |
12
crokily OP @uqf0663
@glcolof @nananqujava @julyclyde @xyfan @HFX3389 感谢指出,之前错误认为“丑陋”的原因主要是: 1. 通信开销:之前担心这样会有多余的通信开销,但现在已经知道了本机 TCP 通信效率与直接内存差不多。 2. 体积问题:担心要打包 Python 环境、依赖库和 Flask 这些,一个小工具会变得很臃肿 3. 没有分布式的需求:完全是本机运行,因为只是一个自用的小工具,划词总结分析翻译这样,后端的逻辑就是用了 langchain 写的调模型整合多 agents 来用,没有太多要处理的运算/数据之类的,所以也就不具备单独作为服务端来放在远程处理运算的需求。 目前因为 1 已经解惑了,所以没有耗时上的顾虑,但因为 2 和 3 ,所以打算使用类似 1 楼提出的方案,用 Pythonnet 这样的库直接启动 CPython 解释器执行 python 代码,看起来最轻量级最简单。 |
13
SenLief 8 天前
我觉得直接 http 最经济,前端都不用写桌面 ui 直接浏览器算了。
|
15
hippieZhou 2 天前 via iPhone
我之前的项目采用 WPF+Python 多前后端混合模式,用的是 MQ 来进行通信的
|