描述:
向分机序列分配执行脚本的作业,返回每个作业的返回值构成的序列。
语法:
callx(spl,…;hs; rspl)
备注:
向分机序列hs分配作业执行spl脚本文件,继承任务空间;返回每个作业的返回值构成的序列。
作业异常结束时自动重新分配(跳过已分配的分机),若无可分配分机则任务失败。默认按顺序分配(第 i 个作业分配至 hs.m@r (i)),所有分机达到最大作业数时暂停分配,待有分机释放资源后继续,直至全部分配完成。
该函数仅适用于企业版。
参数:
spl |
.dfx/.splx格式的脚本文件,可使用绝对路径或相对路径。 相对路径为工具 - 选项 - 环境菜单下的寻址路径,第三方应用程序中集成使用时,寻址路径为raqsoftConfig.xml文件中配置的splPath节点值。 |
… |
传递给.dfx/.splx的参数值。该参数格式一般为序列,需要给.dfx/.splx传递几个参数,则有几个序列成员。 在并行计算时,将按照该参数的序列长度将计算任务拆分为多个子任务,将序列的每一个成员,作为.dfx/.splx的参数值传递到各自的子任务中。 |
hs |
服务器序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"。 hs中IP省略表示当前物理机上的其他进程,IP和端口同时省略即":"表示当前进程。 |
rspl |
rspl是含有两个参数的splx脚本文件,用于指定 reduce 动作脚本 。rspl可省略。 两个参数分别表示当前累积值和当前返回值,rspl返回值将作为新的累积值,初始累积值为null; 该参数的作用是,通过在rspl脚本文件中自定义逻辑,将各分机执行的多个子任务返回值合并成序列,序列成员根据hs排序。 |
选项:
@a |
随机分配。 |
@l |
只有一个作业也分配给所有可用分机,任意一个计算完成,则中断其它任务。 |
示例:
test.splx为分机部署文件,分机序列为["192.168.31.165:8281","192.168.31.39:8281"]:
(一) 单个参数
test.splx文件内容如下:
|
A |
1 |
=connect("demo").query("select * from SCORES where SUBJECT=?",arg1) |
2 |
return A1, A1.(SCORE) |
reduce.splx文件内容如下:
|
A |
|
1 |
=a|b |
a,b 分别为reduce.splx中的参数,a表示当前累计值(初始值为 null),b表示当前返回值(即当前分机执行脚本后返回的结果),通过“|”将当前分机中的返回值拼接起来,当前分机中所有子任务都处理完毕后,将所有子任务的的返回值合并成序列返回。 |
|
A |
|
1 |
=["192.168.31.165:8281","192.168.31.39:8281"] |
分机序列。 |
2 |
=callx("test.splx",["English","Math","PE"];A1) |
按次序分配作业,返回每个作业的返回值构成的序列: |
3 |
=callx("test.splx",["English","Math","PE"];A1;"reduce.splx") |
按次序分配作业,执行reduce动作,返回每个分机的返回值构成的序列: |
4 |
=callx@a("test.splx",["English","Math","PE"];A1;"reduce.splx") |
使用@a选项,随机分配作业: |
5 |
=callx@1("test.splx",["English","Math","PE"];A1) |
使用@1选项,任何一个作业完成,中断其他任务: |
6 |
=callx("test.splx",["English","Math","PE"];":8281") |
在本机的8281端口中执行脚本。 |
7 |
=callx("test.splx",["English","Math","PE"];":") |
在当前进程中执行脚本。 |
(二)多个参数
reduce.splx同上,test.splx文件内容如下:
|
A |
1 |
=connect("demo") |
2 |
=A1.query("select * from EMPLOYEE where EID in (?) and GENDER=?",arg1,arg2) |
3 |
=A1.close() |
4 |
return A2 |
|
A |
|
1 |
=["192.168.31.165:8281","192.168.31.39:8281"] |
分机序列。 |
2 |
=callx("test.splx",[1,20,6,14,5],"F";["192.168.31.165:8281"]) |
向一台分机传递两个参数,其中参数[6,F]查询数据为空: |
3 |
=callx("test.splx",[1,20,6,14,5],"F";A1;"reduce.splx") |
向多台分机传递两个参数,依次分配作业,即[1,F]、[6,F]、[5,F]分配给分机"192.168.31.165:8281",[20,F]、[14,F]分配给分机"192.168.31.39:8281"。 |
4 |
=callx("test.splx",[[1,20,6,14,5],[22,33,44]],"F";A1) |
向多台分机传递多个参数,当接收的同一参数值相同时可用单值形式传递,即[ [1,20,6,14,5],F ] 传递给分机"192.168.31.165:8281",[[22,33,44],F]传递给分机"192.168.31.39:8281"。 |
5 |
=callx("test.splx",[[1,20,6,14,5],[22,33,44]],["F","M"];A1) |
多个节点机接收到的同一参数值不同时以序列形式传递,即[ [1,20,6,14,5],F ] 传递给分机"192.168.31.165:8281",[[22,33,44],M]传递给分机"192.168.31.39:8281"。 |