[ PROMPT_NODE_26496 ]
job-execution
[ SKILL_DOCUMENTATION ]
# DNAnexus 任务执行与工作流
## 概述
任务 (Jobs) 是 DNAnexus 上的基本执行单元。当小程序或应用运行时,系统会创建一个任务,并在隔离的 Linux 环境中通过 worker 节点执行,该环境具有持续的 API 访问权限。
## 任务类型
### 原始任务 (Origin Jobs)
最初由用户或自动化系统创建。
### 主任务 (Master Jobs)
直接启动可执行程序(应用/小程序)的结果。
### 子任务 (Child Jobs)
由父任务派生,用于并行处理或子工作流。
## 运行任务
### 运行小程序
**基本执行**:
python
import dxpy
# 运行小程序
job = dxpy.DXApplet("applet-xxxx").run({
"input1": {"$dnanexus_link": "file-yyyy"},
"input2": "parameter_value"
})
print(f"任务 ID: {job.get_id()}")
**使用命令行**:
bash
dx run applet-xxxx -i input1=file-yyyy -i input2="value"
### 运行应用
python
# 按名称运行应用
job = dxpy.DXApp(name="my-app").run({
"reads": {"$dnanexus_link": "file-xxxx"},
"quality_threshold": 30
})
### 指定执行参数
python
job = dxpy.DXApplet("applet-xxxx").run(
applet_input={
"input_file": {"$dnanexus_link": "file-yyyy"}
},
project="project-zzzz", # 输出项目
folder="/results", # 输出文件夹
name="My Analysis Job", # 任务名称
instance_type="mem2_hdd2_x4", # 覆盖实例类型
priority="high" # 任务优先级
)
## 任务监控
### 检查任务状态
python
job = dxpy.DXJob("job-xxxx")
state = job.describe()["state"]
# 状态: idle, waiting_on_input, runnable, running, done, failed, terminated
print(f"任务状态: {state}")
**使用命令行**:
bash
dx watch job-xxxx
### 等待任务完成
python
# 阻塞直到任务完成
job.wait_on_done()
# 检查是否成功
if job.describe()["state"] == "done":
output = job.describe()["output"]
print(f"任务完成: {output}")
else:
print("任务失败")
### 获取任务输出
python
job = dxpy.DXJob("job-xxxx")
# 等待完成
job.wait_on_done()
# 获取输出
output = job.describe()["output"]
output_file_id = output["result_file"]["$dnanexus_link"]
# 下载结果
dxpy.download_dxfile(output_file_id, "result.txt")
### 任务输出引用
在任务完成前创建对其输出的引用:
python
# 启动第一个任务
job1 = dxpy.DXApplet("applet-1").run({"input": "..."})
# 使用输出引用启动第二个任务
job2 = dxpy.DXApplet("applet-2").run({