如何通过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
相关产品推荐
相关产品推荐

