运行脚本或函数

连接池提供两个函数来分别运行脚本和函数,函数声明如下:

int run(std::string script, std::shared_ptr<std::condition_variable> finished = nullptr, const RpcParam &param = RpcParam());
int run(std::string functionName, const std::vector<ConstantSP>& args, std::shared_ptr<std::condition_variable> finished = nullptr, const RpcParam &param = RpcParam());

参数说明

  • script:待执行的脚本。

  • funcionName:待执行的函数名。

  • args:该函数的参数。

  • param:可选参数,连接配置,结构体定义如下:
    struct RpcParam {
        int priority {4};
        uint32_t parallelism {64};
        uint32_t fetchSize {0};
        bool clearMemory {false};
    };
    • priority:表示优先级,默认是 4。

    • parallelism:表示并行度,默认是 64。

    • fetchSize:对于大数据量的表,为防止内存占用过多,API 提供了分段读取方法,默认值是 0。

    • clearMemory:表示是否在执行结束后清理内存,默认为 false。

  • finished:可选参数,如果非空,执行结束后将调用 notify_all 通知用户。

示例代码

#include "DolphinDB.h"
#include <iostream>
using namespace dolphindb;
using namespace std;

int main()
{
    auto cv = std::make_shared<std::condition_variable>();
    DBConnectionPool p("127.0.0.1", 8848, 1, "admin", "123456");
    int id = p.run("version()", cv);
    // 如果需要调整 RpcParam,利用 struct 的 designated initializers
    // int id = p.run("version()", cv, {.priority=2});
    std::mutex cv_m;
    std::unique_lock<std::mutex> lk(cv_m);
    cv->wait(lk, [id, &p] {
        return p.isFinished(id);
    });
    std::cout << p.getData(id)->getString() << std::endl;

    return 0;
}