运行脚本或函数
连接池提供两个函数来分别运行脚本和函数,函数声明如下:
int run(std::string script, std::shared_ptr<std::condition_variable> finished = nullptr, const RpcParam ¶m = RpcParam());
int run(std::string functionName, const std::vector<ConstantSP>& args, std::shared_ptr<std::condition_variable> finished = nullptr, const RpcParam ¶m = 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;
}