本节为您介绍如何使用Connection对象的方法管理实例上的进程和当前图集上的任务。
每个示例主要展示如何使用所列方法。点击完整示例查看完整代码示例。
进程
所有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
任务
使用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))  
};