本节为您介绍如何使用Connection
对象的方法管理实例上的进程和当前图集上的任务。
每个示例主要展示如何使用所列方法。点击完整示例查看完整代码示例。
Process
所有UQL查询(使用write()
方法执行的算法除外)都作为进程运行。进程完成后,其结果会立刻返回给客户端,但不会被存储。
Top()
获取实例中所有正在运行和正在停止的进程。
参数:
RequestConfig
(可选):请求的配置。如果填入nil
,则使用默认的配置。
返回值:
[]Top
:实例中的全部进程列表。error
:一个包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取实例中所有正在运行和正在终止的进程
requestConfig := &configuration.RequestConfig{
UseMaster: true,
}
myProcess, err := conn.Top(requestConfig)
if err != nil {
println(err)
}
println(utils.JSONString(myProcess))
[{"process_id":"a_4_12573_2","status":"RUNNING","process_uql":"n().e().n().e().n().e().n() as p return count(p)","duration":"48"}]
Kill()
终止实例中正在进行的进程。
参数:
string
:待终止的进程ID,设定为*
时终止全部进程。bool
:设置为true
时,将忽略进程 ID 并终止所有进程。RequestConfig
(可选):请求的配置。如果填入nil
,则使用默认的配置。
返回值:
Response
:请求的结果。error
:一个包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取实例中所有正在运行和正在终止的进程并终止所有进程
myProcess, err := conn.Kill("*", true, nil)
if err != nil {
println(err)
}
println("Operation succeeds:", myProcess.IsSuccess())
Operation succeeds: true
Task
使用write()
方法执行的算法作为任务运行。这些任务存储在算法运行的图集里,直至任务被删除。
ShowTask()
获取当前图集的任务。
参数:
string
:要检索的算法名称或任务ID。TaskStatus
:任务状态。RequestConfig
(可选):请求的配置。如果填入nil
,则使用默认的配置。
返回值:
[]Task
:图集中的全部任务列表。error
:一个包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
// 在图集miniCircle上运行一个算法任务
_, err1 := conn.Uql("algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID', filename_ids: 'ids', filename_num: 'num'}})",
requestConfig)
if err1 != nil {
println(err1)
}
time.Sleep(5 * time.Second)
// 获取上述任务并显示任务信息。
myTask, _ := conn.ShowTask("louvain", structs.TaskStatusDone, requestConfig)
println("TaskID:", myTask[0].TaskInfo.TaskID)
println("Algo name:", myTask[0].TaskInfo.AlgoName)
println("Task result:", utils.JSONString(myTask[0].Result))
TaskID: 65843
Algo name: louvain
Task result: {"community_count":"10","modularity":"0.528182","result_files":"communityID,ids,num"}
ClearTask()
从当前图集清除(删除)任务。状态为TaskStatusComputing
和TaskStatusWriting
的任务无法被清除。
参数:
string
:要检索的算法名称或任务ID。TaskStatus
:任务状态。RequestConfig
(可选):请求的配置。如果填入nil
,则使用默认的配置。
返回值:
Response
:请求的结果。error
:一个包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
// 在图集miniCircle上运行一个算法任务
_, err := conn.Uql("algo(degree).params({order: 'desc'}).write({file:{filename: 'degree_all'}})",
requestConfig)
if err != nil {
println(err)
}
time.Sleep(1 * time.Second)
// 清除以上任务并打印错误代码。
myTask, _ := conn.ShowTask("degree", structs.TaskstatusAll, requestConfig)
myTaskID := myTask[0].TaskInfo.TaskID
println("TaskID is:", myTaskID)
tClear, _ := conn.ClearTask(utils.JSONString(myTaskID), structs.TaskStatusDone, requestConfig)
println("Task cleared:", tClear.IsSuccess())
TaskID is: 65874
Task cleared: true
StopTask()
终止当前图集里状态为COMPUTING
的任务。
参数:
string
:待终止的任务ID;设定为*
时终止全部任务。RequestConfig
(可选):请求的配置。如果填入nil
,则使用默认的配置。
返回值:
Response
:请求的结果。error
:一个包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
// 在图集miniCircle上运行一个算法任务
_, err := conn.Uql("algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID'}})",
requestConfig)
if err != nil {
println(err)
}
// 终止以上任务并打印错误代码
myTask, _ := conn.ShowTask("louvain", structs.TaskstatusAll, requestConfig)
myTaskID := myTask[0].TaskInfo.TaskID
println("TaskID is:", myTaskID)
// 查询上述任务是否已停止
tStop, _ := conn.StopTask(utils.JSONString(myTaskID), requestConfig)
println("Task is stopped:", tStop.IsSuccess())
TaskID is: 65886
Task is stopped: true
完整示例
package main
import (
"time"
"github.com/ultipa/ultipa-go-sdk/sdk"
"github.com/ultipa/ultipa-go-sdk/sdk/configuration"
"github.com/ultipa/ultipa-go-sdk/sdk/structs"
"github.com/ultipa/ultipa-go-sdk/utils"
)
func main() {
// 设置连接
//URI 示例:Hosts:=[]string{"mqj4zouys.us-east-1.cloud.ultipa.com:60010"}
config, _ := configuration.NewUltipaConfig(&configuration.UltipaConfig{
Hosts: []string{"192.168.1.85:60061", "192.168.1.86:60061", "192.168.1.87:60061"},
Username: "***",
Password: "***",
})
// 建立与数据库的连接
conn, _ := sdk.NewUltipa(config)
// 配置请求
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
// 在图集miniCircle上运行一个算法任务
_, err1 := conn.Uql("algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID', filename_ids: 'ids', filename_num: 'num'}})",
requestConfig)
if err1 != nil {
println(err1)
}
time.Sleep(5 * time.Second)
// 获取以上任务
myTask, _ := conn.ShowTask("louvain", structs.TaskStatusDone, requestConfig)
println("TaskID:", myTask[0].TaskInfo.TaskID)
println("Algo name:", myTask[0].TaskInfo.AlgoName)
println("Task result:", utils.JSONString(myTask[0].Result))
};