V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
crokily
V2EX  ›  问与答

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

  •  
  •   crokily · 9 天前 · 898 次点击

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

    目前在开发一个简单的 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)啥的。

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

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

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


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

    目前因为 1 已经解惑了,所以没有耗时上的顾虑,但因为 2 和 3 ,所以打算使用类似 1 楼提出的方案,用 Pythonnet 这样的库直接启动 CPython 解释器执行 python 代码,看起来最轻量级最简单。
    SenLief
        13
    SenLief  
       8 天前
    我觉得直接 http 最经济,前端都不用写桌面 ui 直接浏览器算了。
    crokily
        14
    crokily  
    OP
       8 天前
    @SenLief 桌面端应用,需要截图操作,划词翻译等等,浏览器不太方便
    hippieZhou
        15
    hippieZhou  
       2 天前 via iPhone
    我之前的项目采用 WPF+Python 多前后端混合模式,用的是 MQ 来进行通信的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1520 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:04 · PVG 01:04 · LAX 09:04 · JFK 12:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.