#### 网格池 ##### 内容 - MultiProc_unit ##### MultiProc_unit 功能描述:封装网格常用操作 接口汇总: | 所属分类 | 接口名称 | 说明 | 备注 | | --- | --- | --- | --- | | 总接口 | fastmap | 调用网格执行函数 | | | 日志 | gridLogo | 网格写日志 | | | 等分划分方式 | splitDiv | 度等分划分 | 参数为度(int) | | | splitDiv2 | 长度等分划分 | | | | SplitArrayQK | 数组等分划分 | 参数为数组(array) | | | SplitArrayQK2 | 数组等分划分 | | | 用户数据相关 | DeleteTablebyReg | 批量删除用户数据 | 正则匹配 | | | GettablebyReg | 获取用户数据 | 正则匹配 | | | TryInsetTable | 添加用户数据 | 正则匹配 | 网格使用经验: 1、网格嵌套(网格模型再去调用开网格),容易有效率问题 2、耗时小于0.2s~1s的函数,不建议用网格,因为此时网格调度耗时将会很耗时 3、在测试网格时使用Timeit 测试比较耗时的网络节点,不同网络节点耗时差异可以为0.02s VS 0.4s 通过设置fastmap的sysparm参数,指定运算网格 ###### 内容 - Fastmap - 范例 - 工具函数 - 中间函数 ###### Fastmap - Fastmap - 范例 - 工具函数 - 中间函数 ###### 范例 ####### 内容 - 提取50的5日涨幅 - 提取50的历史涨幅矩阵 ####### 提取50的5日涨幅 ```tsl // **********************参数设置***********************// 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; ``` 返回 ####### 提取50的历史涨幅矩阵 ```tsl // **********************参数设置***********************// 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); end; 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; ``` ###### 工具函数 ####### 内容 - GridLogo ####### GridLogo 用途:MultiProc_unit相关函数。 参数:arg1(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl // 在C:\\temp\\Gridlog默认路径下写日志文件 return unit(MultiProc_unit).gridLogo('测试'); ``` ###### 中间函数 ####### 内容 - SplitDiv - SplitDiv2 - SplitArrayQK - SplitArrayQK2 - DeleteTablebyReg - GettablebyReg - TryInsetTable ####### SplitDiv 范例 ```tsl return unit(MultiProc_unit).splitDiv(14, 5); // array(0,2,4,6,8,14) ``` ####### SplitDiv2 范例 ```tsl return unit(MultiProc_unit).splitDiv2(14, 5); // array(0,3,6,9,12,14) ``` ####### SplitArrayQK 用途:MultiProc_unit相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl 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 用途:MultiProc_unit相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl 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 用途:MultiProc_unit相关函数。 参数:arg1(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl return unit(MultiProc_unit).DeleteTablebyReg('test'); ``` ####### GettablebyReg 用途:MultiProc_unit相关函数。 参数:arg1(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl return unit(MultiProc_unit).GettablebyReg('test'); ``` ####### TryInsetTable 用途:MultiProc_unit相关函数。 参数:arg1,arg2(按示例顺序传入)。 返回:处理后的结果值。 范例 ```tsl return unit(MultiProc_unit).TryInsetTable('test', array(1, 2, 3)); ```