QBugHunter
V2EX  ›  问与答

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

  •  
  •   QBugHunter · Jan 24, 2021 · 2088 views
    This topic created in 2114 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
    gimp
    Jan 24, 2021
    1
    脚本 B 经常性需要替换,不知道现在是怎么替换的

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

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

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