#### 网格池

##### 内容

- 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));
```
