19 KiB
并行计算 / 任务池
fastmap_withconfig(grid_no, func, parms, parmstype, configs)
声明:function
读取 configs,解析参数信息,调用 fastmap 模型
| 参数 | 类型 | 说明 |
|---|---|---|
grid_no |
int | 整型,网格数 |
func |
string | 字符串型或函数指针,要调用网格计算的函数 |
parms |
array | 数组,func 的参数列表 |
parmstype |
array | 数组,parms 的对应类型 取值 说明 0\nil 每次调用都是相同的值(默认) 1 按网格数均分,调用的时候直接用子数组 2 按网格数均分,调用执行的时候,对子数组数组元素单个依次取 |
configs |
array | 字符串下标数组,执行所需的其他配置,设置 |
返回:int
fastpoolmap_withconfig(pool_num, func, parms, parmstype, configs)
声明:function
fastmap 任务池版接口,调用网格执行 func
| 参数 | 类型 | 说明 |
|---|---|---|
pool_num |
int | 整型,任务池数,默认两个 |
func |
string | 字符串型或函数指针,要调用网格计算的函数 |
parms |
array | 数组,func 的参数列表 |
parmstype |
array | 数组,parms 的对应类型 取值 说明 0\nil 每次调用都是相同的值(默认) 1 按网格数均分,调用的时候直接用子数组 2 按网格数均分,调用执行的时候,对子数组数组元素单个依次取 |
configs |
array | 字符串下标数组,执行所需的其他配置,设置 |
返回:array
示例
范例01:.4.1 提取 50 的 5 日涨幅
//**********************参数设置***********************//
N := 5;
endt := today();
stocks := getbk("上证50");
//**********************网格模版*********************//
gridNo := 3; //网格个数,0:表示只使用本地服务器
func := FunctionName() + '.tsubbystocks'; //网格函数
parms := array(N,endt,stocks);
parmstype := array(0, 0, 1);
return unit(MultiProc_unit).fastmap(gridNo,func,parms,parmstype);
//***********************子函数**********************//
function tsubbystocks(N, endt,stocks);
begin
sp_s(pn_date(),endt);
i := 0;
ret := array();
for _,stk in stocks do
begin
sp_s(PN_Stock(),stk);
for j := 0 to N do
begin
ret[I,'截止日'] := ref(sp_time(),j);
ret[i,'代码'] := stk;
ret[i,'名称'] := stockname(stk);
ret[I,'涨幅(%)'] := ref(stockzf3(),j);
i++;
end
end;
return ret;
end;
范例02:调用示例
//**********************参数设置***********************//
N := 5;
endt := today();
stocks := getbk("上证50");
//**********************网格模版*********************//
//**********************网格模版*********************//
gridNo := 3; //网格个数,0:表示只使用本地服务器
func := FunctionName() + '.tsubbystock'; //网格函数
parms := array(N,endt,stocks);
parmstype := array(0, 0, 2);
return unit(MultiProc_unit).fastmap(gridNo,func,parms,parmstype);
function tsubbystock(N, endt,stock);
begin
sp_s(PN_Stock(),stock);
sp_s(pn_date(),endt);
ret := array(
"代码":stock,
"名称":stockname(stock),
"截止日":endt,
);
for i := 1 to N do
ret["T_" $ i] := ref(stockzf3(),i);
return ret;
end;
范例03:调用示例
N := 5;
endt := today();
stocks := getbk("上证50");
//-------------------------==进程池模板==----------------------------
poolNum := 2; //进程池数,默认为2
func := FunctionName() + '.tsubbystocks'; //网格函数
parms := array(N,endt,stocks);
parmstype := array(0, 0, 1);
configs := array("结果拼接方式":0,'任务单元数':3);
return unit(MultiProc_unit).fastpoolmap_withconfig(poolNum, func,
parms,parmstype,configs);
//-------------------------==子函数==----------------------------
function tsubbystocks(N, endt,stocks);
begin
sp_s(pn_date(),endt);
i := 0;
ret := array();
for _,stk in stocks do
begin
sp_s(PN_Stock(),stk);
for j := 0 to N-1 do
begin
ret[I,'截止日'] := ref(sp_time(),j);
ret[i,'代码'] := stk;
ret[i,'名称'] := stockname(stk);
ret[I,'涨幅(%)'] := ref(stockzf3(),j);
i++;
end
end;
return ret;
end;
gridLogo(str, dir)
声明:function
网格写日志,一个网格 id 一个文件
| 参数 | 类型 | 说明 |
|---|---|---|
str |
string | 字符串型,任务名称 |
dir |
string | 字符串型,日志文件路径 ,默认为:C:\temp\Gridlog |
返回:int
示例
范例01:调用示例
//在C:\\temp\\Gridlog 默认路径下写日志文件
Return unit(MultiProc_unit).gridLogo('测试');
splitDiv(len, n)
声明:function
网格参数划分,分不平均时,余数给最后一个网格
| 参数 | 类型 | 说明 |
|---|---|---|
len |
int | 整型,参数个数 N_:整型,网格个数 |
n |
int | 分组或移动窗口的期数/数量 |
返回:array
示例
范例01:调用示例
Return unit(MultiProc_unit).splitDiv(14,5); // array(0,2,4,6,8,14)
splitDiv2(len, n)
声明:function
网格参数划分,分不平均时,前面 M 个网格加一
| 参数 | 类型 | 说明 |
|---|---|---|
len |
int | 整型,参数长度 N_:整型,网格个数 |
n |
int | 分组或移动窗口的期数/数量 |
返回:array
示例
范例01:调用示例
Return unit(MultiProc_unit).splitDiv2(14,5); // array(0,3,6,9,12,14)
splitArrayQK(arr, n)
声明:function
数组等分区间,余数给最后一个网格
| 参数 | 类型 | 说明 |
|---|---|---|
arr |
array | 数组,要划分数组 N_:整型,网格个数 |
n |
int | 分组或移动窗口的期数/数量 |
返回:array
示例
范例01:调用示例
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
return unit(MultiProc_unit).SplitArrayQK(arr,5);
//array((2,1),(3,4),(9,5),(7,8),(9,15))
splitArrayQK2(arr, n)
声明:function
数组等分区间,分不平均时,前面 M 个网格加一
| 参数 | 类型 | 说明 |
|---|---|---|
arr |
array | 数组,要划分数组 N_:整型,网格个数 |
n |
int | 分组或移动窗口的期数/数量 |
返回:array
示例
范例01:调用示例
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
return unit(MultiProc_unit).SplitArrayQK2(arr,5);
// array((2,3),(4,5),(7,9),(10,12),(13,15))
deleteTablebyReg(reg)
声明:function
通过正则表达式匹配名称,批量删除用户数据
| 参数 | 类型 | 说明 |
|---|---|---|
reg |
string | 字符串型,匹配的字符串 |
返回:int
示例
范例01:调用示例
Return unit(MultiProc_unit).DeleteTablebyReg('test');
gettablebyReg(reg)
声明:function
通过正则表达式匹配名称,获取用户数据
| 参数 | 类型 | 说明 |
|---|---|---|
reg |
string | 字符串型,匹配的字符串 |
返回:array
示例
范例01:调用示例
Return unit(MultiProc_unit).GettablebyReg('test');
tryInsetTable(path, value)
声明:function
添加用户数据,如果用户数据存在同名,则插入,否则新建
| 参数 | 类型 | 说明 |
|---|---|---|
path |
string | 字符串型,用户数据存储路径 |
value |
array | 数组,要存储的数据 |
返回:int
示例
范例01:调用示例
Return unit(MultiProc_unit).TryInsetTable('test',array(1,2,3));
create(grid_num, name, funafter)
声明:function
初始化
| 参数 | 类型 | 说明 |
|---|---|---|
grid_num |
integer | 整数,网格数,可不给,与类属性 GridNum 一致 |
name |
string | 字符串,名称,可不给,与类属性 name 一致 |
funafter |
string | 字符串,回调模型,可不给,不给时回调模型走类方法 fun_after |
返回:any
fun_after(state, ret, param)
声明:function
执行完之后的自动回调,可重写,主方法自动调用,如果初始化时设置了funafter 参数,则优
| 参数 | 类型 | 说明 |
|---|---|---|
state |
integer | 整数或字符串,此次调用的执行状态,报错则为报错信息串 -1:未启动 0:已顺利计算完 1:正在计算 字符串:报错信息 |
ret |
array | 此次调用的执行结果 |
param |
array | 此次调用的参数 |
返回:any
fun_afterwithinfo(state, ret, param, info)
声明:function
执行完之后的自动回调,有信息列是将信息列与执行结果合并,可重写,主方法自动调用
| 参数 | 类型 | 说明 |
|---|---|---|
state |
integer | 整数或字符串,此次调用的执行状态,报错则为报错信息串 -1:未启动 0:已顺利计算完 1:正在计算 字符串:报错信息 |
ret |
array | 此次调用的执行结果 |
param |
array | 此次调用的参数 |
info |
any | 信息列 |
返回:any
get_result(contype)
声明:function
回收各进程池的计算结果,如果有信息列则合并在结果中
| 参数 | 类型 | 说明 |
|---|---|---|
contype |
any | 结果合并或返回方式 |
返回:any
get_runsummary(ifsuccess, ifallfileds)
声明:function
执行报告
| 参数 | 类型 | 说明 |
|---|---|---|
ifsuccess |
any | 整型,执行报告处理 |
ifallfileds |
any | 整型,返回字段处理,默认为 0 取值 说明 0 不返回执行结果字段 1 返回全部字段 |
返回:any
joins()
声明:function
等待所有进程结束
返回:any
set_mapfunc(funname, param_1, param_2, arg_4)
声明:function
添加执行
| 参数 | 类型 | 说明 |
|---|---|---|
funname |
any | 目标函数名称 |
param_1 |
any | 添加执行使用的 param_1 输入值 |
param_2 |
any | 添加执行使用的 param_2 输入值 |
arg_4 |
any | 添加执行使用的 arg_4 输入值 |
返回:any
set_mapfuncwithinfo(info, funname, param_1, param_2, arg_5)
声明:function
添加执行,传入信息列
| 参数 | 类型 | 说明 |
|---|---|---|
info |
any | 与任务结果关联的信息数据 |
funname |
any | 目标函数名称 |
param_1 |
any | 添加执行,传入信息列使用的 param_1 输入值 |
param_2 |
any | 添加执行,传入信息列使用的 param_2 输入值 |
arg_5 |
any | 添加执行,传入信息列使用的 arg_5 输入值 |
返回:any
set_resultmapfunc(funname, param_1, param_2, arg_4)
声明:function
添加执行,储存计算结果
| 参数 | 类型 | 说明 |
|---|---|---|
funname |
any | 目标函数名称 |
param_1 |
any | 添加执行,储存计算结果使用的 param_1 输入值 |
param_2 |
any | 添加执行,储存计算结果使用的 param_2 输入值 |
arg_4 |
any | 添加执行,储存计算结果使用的 arg_4 输入值 |
返回:any
set_resultmapfuncwithinfo(info, funname, param_1, param_2, arg_5)
声明:function
添加执行,传入信息列并储存结果
| 参数 | 类型 | 说明 |
|---|---|---|
info |
any | 与任务结果关联的信息数据 |
funname |
any | 目标函数名称 |
param_1 |
any | 添加执行,传入信息列并储存结果使用的 param_1 输入值 |
param_2 |
any | 添加执行,传入信息列并储存结果使用的 param_2 输入值 |
arg_5 |
any | 添加执行,传入信息列并储存结果使用的 arg_5 输入值 |
返回:any
waits(tm, maxtimes)
声明:function
轮训等待可用网格,设置最大轮训次数
| 参数 | 类型 | 说明 |
|---|---|---|
tm |
datetime | 间隔时间,默认值为由类属性 default_poll_time 设置(1.5s) maxtimes 为最大轮训次数,默认值为 100000,若轮训次数>maxtimes,则退出等待,返回日志: 等待达到最大次数 maxtimes!!! |
maxtimes |
any | 允许的最大轮询次数 |
返回:any
waits_forever(tm)
声明:function
轮训等待可用网格,不设置最大轮训次数
| 参数 | 类型 | 说明 |
|---|---|---|
tm |
datetime | 间隔时间,默认值为由类属性 default_poll_time 设置(1.5s) |
返回:any