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

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

  •  
  •   crokily · 11 天前 · 917 次点击

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

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

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


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

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