在通过Google Colab使用Python导出图像的时候,运行的时候发现导错了某些波段信息,然而历史巨轮已经滚动了,想取消任务,一时间发现找不到叉叉,只能等导出完再删掉。之后,找了一些方法,这里做个记录。
GEE实战 | 取消单个任务或者批处理cancel a task / tasks
开始任务
先介绍下通过Python导出,好处是不用点击run就可以开始任务~
单个任务
Create an export task:
task = ee.batch.Export.image.toDrive(image=my_image, # an ee.Image object.
region=my_geometry, # an ee.Geometry object.
description='mock_export',
folder='gdrive_folder',
fileNamePrefix='mock_export',
scale=1000,
crs='EPSG:4326')
Start an export task:
task.start()
Check export task status:
task.status()
多个任务
多个导出通过for循环就好了。
# Export all the training data (in many pieces), with one task per geometry.
for g in range(trainingPolys.size().getInfo()):
geomSample = ee.FeatureCollection([])
for i in range(n):
sample = arrays.sample(
region = ee.Feature(trainingPolysList.get(g)).geometry(),
scale =100,
numPixels = N / n, # Size of the shard.
seed = i,
tileScale = 8
)
geomSample = geomSample.merge(sample)
desc = TRAINING_BASE + '_gSlope' + str(g)
task = ee.batch.Export.table.toDrive(
collection = geomSample,
description = desc,
folder = FOLDER,
fileNamePrefix = desc,
fileFormat = 'TFRecord',
selectors = BANDS + LABELS
)
task.start()
可以查看导出情况,或者直接去GEE在线平台看。
Monitor task progress
# Print all tasks.
pprint(ee.batch.Task.list()[:10])
[<Task EXPORT_FEATURES: eval_patches_gSlope2 (READY)>,
<Task EXPORT_FEATURES: eval_patches_gSlope1 (READY)>,
<Task EXPORT_FEATURES: eval_patches_gSlope0 (READY)>,
<Task EXPORT_FEATURES: training_patches_gSlope4 (READY)>,
<Task EXPORT_FEATURES: training_patches_gSlope3 (READY)>,
<Task EXPORT_FEATURES: training_patches_gSlope2 (READY)>,
<Task EXPORT_FEATURES: training_patches_gSlope1 (READY)>,
<Task EXPORT_FEATURES: training_patches_gSlope0 (READY)>,
<Task EXPORT_FEATURES: eval_patches_gSlope2 (FAILED)>,
<Task EXPORT_FEATURES: eval_patches_gSlope1 (FAILED)>]
取消任务
单个任务(线上平台)
在官网上查找发现还是可以通过在线JavaScript平台取消的,但是需要一个个点击,官网是这么介绍的。
简单翻译下,就是很友好,自己点击run开始任务,如果中途取消就需要点击旁边旋转的GEE标志。
对于任务小的情况还可以,一旦几百个,就对手指提出了较大挑战。😦
Python API
后来翻了下python API,找打了函数 😦 所以还是建议第一个看API,能解决很多问题。开始取消一个任务代码如下:
单个任务
Start a task:
task.start()
Cancel a task:
task.cancel()
就是这么简单~
多个任务
多个取消就用ee.batch.Task.list()
加上循环,然后反复cancel就好啦,比如:
for task in ee.batch.Task.list()[:10]:
task.cancel()
GEE Command Line Tool
不死心的我又去找了下,发现可以通过GEE的命令行工具earthengine Command Line Tool完成任务取消操作。这里简单介绍下
一般来说,earthengine在安装Python API的时候会自动安装,可以通过如下代码测试下。
earthengine
这是在命令行的代码,如果是在Google Colab或者jupyter notebook等平台操作,需要前面加!
,即:
!earthengine
因为本人是在Google Colab下运行,所以下面都加了!
如果没报错,可以通过如下进行对某个命令查找帮助:
!earthengine command -h
单个任务
接下来就是如何取消任务了。想取消一个任务,完整代码如下:
!earthengine task list
!earthengine task info TASK_ID
!earthengine task cancel TASK_ID
下面稍微解释下:首先查看任务列表:
!earthengine task list
前面红色这些是Task ID
补充下,同Python一样,也可以只打印部分tasks:
first 5 tasks:
earthengine task list | head -n 5
last 5 tasks:
earthengine task list | tail -n 5
知道Task ID后,可以进一步查看task信息,信息如下:
!earthengine task info 34IP7EXHFBP6BXBHPDOFGXWX
然后一个个ID取消就好了,通过for循环啥的也可以完成批处理。
多个任务
我们的最高目标还是批删除任务,所以还是找到了方法 😃 其实也很简单
!earthengine task cancel all
Dont worry, be happy~
批处理Console (没成功)
后来发现这篇博客貌似可以成功,大家参考下。
Stack Exchange解决方案
网上找了篇通过console任务控制命令,但是没运行成功。大家可以自行尝试,欢迎成功的分享经验~ 链接
首先在浏览器打开GEE线上平台并打开开发者人员工具ctrl+shift+I
,在调试器console粘贴代码:
启动全部task
function runTaskList(){
var tasklist = document.getElementsByClassName('task local type-EXPORT_IMAGE awaiting-user-config');
for (var i = 0; i < tasklist.length; i++)
tasklist[i].getElementsByClassName('run-button')[0].click();
}
function confirmAll() {
var ok = document.getElementsByClassName('goog-buttonset-default goog-buttonset-action');
for (var i = 0; i < ok.length; i++)
ok[i].click();
}
runTaskList();
confirmAll();
停止全部task
function stopTaskList(){
var tasklist = document.getElementsByClassName('task remote type-EXPORT_IMAGE submitted-to-backend');
for (var i = 0; i < tasklist.length; i++)
tasklist[i].getElementsByClassName('indicator')[0].click();
}
function confirmAll() {
var ok = document.getElementsByClassName('goog-buttonset-default goog-buttonset-action');
for (var i = 0; i < ok.length; i++)
ok[i].click();
}
stopTaskList();
confirmAll();