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

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

  •  
  •   crokily · 2025 年 1 月 11 日 · 1924 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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


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

    目前因为 1 已经解惑了,所以没有耗时上的顾虑,但因为 2 和 3 ,所以打算使用类似 1 楼提出的方案,用 Pythonnet 这样的库直接启动 CPython 解释器执行 python 代码,看起来最轻量级最简单。
    SenLief
        13
    SenLief  
       2025 年 1 月 12 日
    我觉得直接 http 最经济,前端都不用写桌面 ui 直接浏览器算了。
    crokily
        14
    crokily  
    OP
       2025 年 1 月 12 日
    @SenLief 桌面端应用,需要截图操作,划词翻译等等,浏览器不太方便
    hippieZhou
        15
    hippieZhou  
       2025 年 1 月 18 日 via iPhone
    我之前的项目采用 WPF+Python 多前后端混合模式,用的是 MQ 来进行通信的
    forgottencoast
        16
    forgottencoast  
       2025 年 7 月 13 日
    @hippieZhou
    请问有考虑过采用 Python.NET 吗?
    hippieZhou
        17
    hippieZhou  
       2025 年 7 月 13 日 via iPhone
    @forgottencoast 因为我们当时项目中 python 相关的实现有一些特定的依赖,并且团队中大多数都是写 python ,不会.NET ,所以就没考虑这种框架
    forgottencoast
        18
    forgottencoast  
       2025 年 7 月 13 日
    @hippieZhou
    我看你前面说 WPF+Python ,所以以为 WPF 是你们写的,这么说来 WPF 是另外一个团队在写?
    hippieZhou
        19
    hippieZhou  
       2025 年 7 月 13 日 via iPhone   ❤️ 1
    @forgottencoast 是我和另一位同事负责 WPF ,然后对接另一个团队几个人写的 python 服务
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2789 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:27 · PVG 15:27 · LAX 23:27 · JFK 02:27
    ♥ Do have faith in what you're doing.