QBugHunter
V2EX  ›  问与答

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

  •  
  •   QBugHunter · Jan 24, 2021 · 1877 views
    This topic created in 1946 days ago, the information mentioned may be changed or developed.

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

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

    这里有 2 个限制

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

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

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

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

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

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

    目前的策略就是,程序 A 里写了一段 C++调用 python 的脚本,获取 get_result ()的返回值,这样无论 ookTB.py 这个脚本如何修改,程序 A 总能正确的调用并获得结果
    billlee
        4
    billlee  
       Jan 24, 2021
    C++ 调 python 完全没有问题,不要乱优化
    nuk
        5
    nuk  
       Jan 24, 2021
    我们都是 popen 来一发
    shakaraka
        6
    shakaraka  
    PRO
       Jan 24, 2021
    rpc ?
    QBugHunter
        7
    QBugHunter  
    OP
       Jan 24, 2021
    @billlee
    赵 4 老师说决定不要做语言 A 调用语言 B 这样的事情,但我又想不出别的好办法
    Ptu2sha
        8
    Ptu2sha  
       Jan 24, 2021
    mq rpc
    BingoXuan
        9
    BingoXuan  
       Jan 24, 2021 via Android
    @QBugHunter
    当然是开进程调用啦。不要老想着 a 语言调用 b 语言,然后写了各种接口。最后其实完全可以像楼上那样 popen 执行,抓取返回数据
    J55s5
        10
    J55s5  
       Jan 24, 2021
    这个调用没毛病,做好分层就可以。现在 Qt 的开发都是 C++ + QML,可以理解为 C++带动 JS,问题不大
    J55s5
        11
    J55s5  
       Jan 25, 2021
    不过我来搞的话,会看业务吧,看看能不能通过协议来调用,跨进程通信。这样耦合度会更低,也更好维护
    dddd1919
        12
    dddd1919  
       Jan 25, 2021
    如果 python 只是简单的任务脚本,需要调用执行即可:c++ 用 shell 命令 + 传参调用 python 脚本
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5854 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 01:53 · PVG 09:53 · LAX 18:53 · JFK 21:53
    ♥ Do have faith in what you're doing.