callx()

阅读(3161) 标签: callx,

本章介绍callx()函数的使用。

 

callx(spl,...;hs ;rdfx)

描述:

向分机序列分配作业执行脚本,返回每个作业的返回值构成的序列。

语法:

callx(spl,…;hs;rdfx)

备注:

向分机序列hs分配作业执行脚本.dfx/.splx,继承任务空间;返回每个作业的返回值构成的序列。…为传递给.dfx/.splx的参数值。

作业非正常结束则将重新分配(避开已分配过分机),如果找不到可用分机则任务失败,作业分配到不可用分机时被认为非正常结束,缺省将依次分配,即第i个作业分配到hs.m@r(i)上,分配到每个分机都达到最大作业数后则暂停,等某分机返回一个作业后再继续分配,直接全部分配完成

 rdfx是两个参数的脚本,用于reduce动作,可省略。其参数分别是当前累积值和当前返回值,rdfx返回值将作为新的累积值,初始累积值为null;有rdfx时,返回值将是每个分机的返回值构成的序列,按hs的次序。

参数:

spl

脚本文件.dfx/.splx,可设置为绝对路径或相对路径。相对路径为工具->选项->【环境】菜单下的寻址路径。

传递给.dfx/.splx的参数值。该参数格式一般为序列,需要给.dfx/.splx传递几个参数,即有几个序列。在并行计算时,将按照该参数的序列长度将计算任务拆分为多个子任务,将序列的每一个成员,作为.dfx/.splx的参数值传递到各自的子任务中。

hs

服务器序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"

hsIP省略表示当前物理机上的其他进程,IP和端口同时省略即":"表示当前进程。

rdfx

带有两个参数的dfx脚本,用于reduce动作,可省略。

选项:

@a

随机分配。

@l

只有一个作业也分配给所有可用分机,任何一个就算完成,中断其它任务。

 

示例:

test.dfx为分机部署文件,分机序列为["192.168.31.165:8281","192.168.31.39:8281"]

(一)  单个参数

test.dfx文件内容如下:

 

A

B

1

=connect("demo").query("select * from SCORES  where SUBJECT=?",arg1)

 

2

return A1

return A1.(SCORE)

reduce.dfx文件内容如下:

  

A

 

1

=a|b

ab 分别为reduce.dfx中的参数,a表示当前累计值,b表示当前返回值。

  

  

A

 

1

=["192.168.31.165:8281","192.168.31.39:8281"]

分机序列。

2

=callx("test.dfx",["English","Math","PE"];A1)

按次序分配作业,返回每个作业的返回值构成的序列:

3

=callx("test.dfx",["English","Math","PE"];A1;"reduce.dfx")

按次序分配作业,执行reduce动作,返回每个分机的返回值构成的序列:

4

=callx@a("test.dfx",["English","Math","PE"];A1;"reduce.dfx")

使用@a选项,随机分配作业:

5

=callx@1("test.dfx",["English","Math","PE"];A1)

使用@1选项,任何一个作业完成,中断其他任务:

6

=callx("test.dfx",["English","Math","PE"];":8281")

在本机的8281端口中执行脚本。

7

=callx("test.dfx",["English","Math","PE"];":")

在当前进程中执行脚本。

(二)多个参数

reduce.dfx同上,test.dfx文件内容如下:

 

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.dfx",[1,20,6,14,5],"F";["192.168.31.165:8281"])

向一台分机传递两个参数,参数[6,F]查询数据为空:

3

=callx("test.dfx",[1,20,6,14,5],"F";A1;"reduce.dfx")

向多台分机传递两个参数,依次分配作业,即[1,F][6,F][5,F]分配给分机"192.168.31.165:8281"[20,F][14,F]分配给分机"192.168.31.39:8281"

4

=callx("test.dfx",[[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.dfx",[[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"