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

跨语言调用是否为最优解,如果不是如何避免?

  •  
  •   QBugHunter · 2021-01-24 16:24:46 +08:00 · 1492 次点击
    这是一个创建于 1398 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个程序 A,使用 C++编写。

    然后有一个 Pythno 脚本 B,脚本 B 用于去某些指定的网站抓取数据,抓取的时间由程序 A 来决定,只有特定时间内抓取的数据才有效。

    这里有 2 个限制

    1. 程序 A 决定抓取时间是由别的因素来决定的,包括人工输入,所以完全随机,因此脚本 B 无法通过在指定时间执行,把数据存入文件,然后程序 A 来读取这种形式。
    2. 脚本 B 经常性的需要替换,约定脚本 B 里的函数名一样,但函数代码经常更换已满足不同情况下的需求

    在这种情况下,只能在程序 A 里编写调用 python 脚本的代码。

    请问类似这种情况,由 C++调用 Python 是否是最优选择?如果不是有没有更好的解决办法。

    12 条回复    2021-01-25 10:13:08 +08:00
    gimp
        1
    gimp  
       2021-01-24 16:35:19 +08:00
    脚本 B 经常性需要替换,不知道现在是怎么替换的

    如果基于协议解耦呢,Python 提供 HTTP 、TCP 、UDP 接口,灵活性应该会高一点儿
    locoz
        2
    locoz  
       2021-01-24 16:39:10 +08:00 via Android
    把 B 做成 RPC 就好了
    QBugHunter
        3
    QBugHunter  
    OP
       2021-01-24 16:41:43 +08:00
    @gimp
    就是替换,/home/Lwx/LookTB.py
    目前的策略是 LookTB.py 文件,里面有个函数
    def get_result()

    然后每次替换的时候都是直接替换 LookTB.py 这个文件,但不管脚本如何替换,文件名和函数名以及函数的返回值类型都不会变

    目前的策略就是,程序 A 里写了一段 C++调用 python 的脚本,获取 get_result ()的返回值,这样无论 ookTB.py 这个脚本如何修改,程序 A 总能正确的调用并获得结果
    billlee
        4
    billlee  
       2021-01-24 16:44:14 +08:00
    C++ 调 python 完全没有问题,不要乱优化
    nuk
        5
    nuk  
       2021-01-24 16:46:19 +08:00
    我们都是 popen 来一发
    wunonglin
        6
    wunonglin  
       2021-01-24 16:50:50 +08:00
    rpc ?
    QBugHunter
        7
    QBugHunter  
    OP
       2021-01-24 17:27:19 +08:00
    @billlee
    赵 4 老师说决定不要做语言 A 调用语言 B 这样的事情,但我又想不出别的好办法
    Ptu2sha
        8
    Ptu2sha  
       2021-01-24 17:28:42 +08:00
    mq rpc
    BingoXuan
        9
    BingoXuan  
       2021-01-24 19:47:25 +08:00 via Android
    @QBugHunter
    当然是开进程调用啦。不要老想着 a 语言调用 b 语言,然后写了各种接口。最后其实完全可以像楼上那样 popen 执行,抓取返回数据
    wzzzx
        10
    wzzzx  
       2021-01-24 23:59:52 +08:00
    这个调用没毛病,做好分层就可以。现在 Qt 的开发都是 C++ + QML,可以理解为 C++带动 JS,问题不大
    wzzzx
        11
    wzzzx  
       2021-01-25 00:00:47 +08:00
    不过我来搞的话,会看业务吧,看看能不能通过协议来调用,跨进程通信。这样耦合度会更低,也更好维护
    dddd1919
        12
    dddd1919  
       2021-01-25 10:13:08 +08:00
    如果 python 只是简单的任务脚本,需要调用执行即可:c++ 用 shell 命令 + 传参调用 python 脚本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2825 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:06 · PVG 15:06 · LAX 23:06 · JFK 02:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.