You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python API批量取消Earth Engine中的影像导出任务

批量取消Earth Engine中的影像导出任务

针对你有大量运行中任务,需要保留矢量导出、取消影像导出的需求,可以通过Earth Engine的API批量筛选并取消目标任务,以下分两种常用场景给出实现方法:

一、在GEE代码编辑器(JavaScript)中实现

基础版本(适用于任务数≤100)

// 获取所有任务
var tasks = ee.data.listOperations();

// 筛选需要取消的任务:运行中/等待中 + 影像导出类型
var tasksToCancel = tasks.operations.filter(function(task) {
  var taskState = task.metadata.state;
  var taskType = task.metadata.type;
  // 如需仅取消正在运行的任务,可移除`state === 'READY'`
  return (taskState === 'RUNNING' || taskState === 'READY') && taskType === 'EXPORT_IMAGE';
});

// 执行取消操作
tasksToCancel.forEach(function(task) {
  var taskId = task.name.split('/').pop();
  print('取消任务:', taskId, task.metadata.description);
  ee.data.cancelOperation(task.name);
});

print('已取消', tasksToCancel.length, '个影像导出任务');

分页版本(适用于任务数>100,比如你的600个任务)

由于ee.data.listOperations()默认仅返回前100个任务,需要递归处理分页:

// 递归取消所有分页中的影像导出任务
var cancelImageTasks = function(pageToken) {
  var requestOptions = pageToken ? {pageToken: pageToken} : {};
  var taskPage = ee.data.listOperations(requestOptions);
  
  // 筛选当前页的目标任务
  var tasksToCancel = taskPage.operations.filter(function(task) {
    var taskState = task.metadata.state;
    var taskType = task.metadata.type;
    return (taskState === 'RUNNING' || taskState === 'READY') && taskType === 'EXPORT_IMAGE';
  });
  
  // 取消当前页任务
  tasksToCancel.forEach(function(task) {
    var taskId = task.name.split('/').pop();
    print('取消任务:', taskId, task.metadata.description);
    ee.data.cancelOperation(task.name);
  });
  
  // 处理下一页
  if (taskPage.nextPageToken) {
    cancelImageTasks(taskPage.nextPageToken);
  } else {
    print('所有符合条件的影像导出任务取消完成');
  }
};

// 启动批量取消
cancelImageTasks();

二、使用Python API实现(适合批量自动化处理)

分页版本(适配大量任务)

import ee

# 初始化Earth Engine(首次运行需完成身份验证)
ee.Initialize()

def cancel_image_exports(page_token=None):
    # 获取当前页任务
    task_page = ee.data.listOperations(pageToken=page_token)
    # 筛选目标任务
    tasks_to_cancel = [
        task for task in task_page['operations']
        if (task['metadata']['state'] in ('RUNNING', 'READY')) and
           task['metadata']['type'] == 'EXPORT_IMAGE'
    ]
    
    # 执行取消
    for task in tasks_to_cancel:
        task_id = task['name'].split('/')[-1]
        print(f"取消任务: {task_id} - {task['metadata']['description']}")
        ee.data.cancel_operation(task['name'])
    
    # 递归处理下一页
    if 'nextPageToken' in task_page:
        cancel_image_exports(page_token=task_page['nextPageToken'])
    else:
        print('所有符合条件的影像导出任务已取消')

# 启动批量取消
cancel_image_exports()

关键说明

  • 任务状态筛选:RUNNING是正在运行的任务,READY是等待队列中的任务,可根据需求调整是否保留后者
  • 任务类型区分:EXPORT_IMAGE对应影像导出任务,EXPORT_FEATURES为矢量导出任务,代码中已精准过滤
  • 分页处理:当任务数量超过100时,必须通过nextPageToken递归获取所有任务,避免遗漏

内容的提问来源于stack exchange,提问作者Sean Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:34:56