def _task(self): status = Task(self.task_id).status() return Task(status['id'], { 'type': status['task_type'], 'description': status['description'], 'state': status['state'], })
def close(self): try: ee.InitializeThread(self.credentials) status = Task(self.task_id).status() if status['state'] in (Task.State.READY, Task.State.RUNNING): logger.debug('Canceling Earth Engine Task {0}: {1}'.format( self, status)) Task( status['id'], { 'type': status['task_type'], 'description': status['description'], 'state': status['state'], }).cancel() except ee.EEException as e: logger.warn('Failed to cancel task {0}: {1}'.format(self, e))
def run(self): logger.info( 'Monitoring Earth Engine export. task_id: {0}, destination: {1}'. format(self.task_id, self.destination)) ee.InitializeThread(self.credentials) while self.running(): time.sleep(10) status = Task(self.task_id).status() state = status['state'] if state == Task.State.READY: self._update_state(State.PENDING) elif state == Task.State.RUNNING: self._update_state(State.ACTIVE) elif state == Task.State.COMPLETED: self._update_state(State.COMPLETED) self.resolve() return else: error_message = status[ 'error_message'] if state == Task.State.FAILED else 'Earth Engine export was canceled' self._status = { 'state': State.FAILED, 'message': error_message } raise Exception(error_message if error_message else 'Earth Engine export failed')
def run( cls, task: Task ) -> bool: task.start() status: Dict = task.status() print(f" Task Status = {status}") t0 = time.time() while True: time.sleep(10) status: Dict = task.status() elapsed = time.time() - t0 print(f" Task State = {status['state']}, elapsed = {elapsed:.2f} sec ({elapsed / 60:.2f} min)") if not task.active(): if status['state'] == Task.State.FAILED: print(f"Task failed, error report: {status['error_message']}") return False else: return True
def _task_status(self): task = Task(self.task_id).status() if task['state'] not in (Task.State.UNSUBMITTED, Task.State.FAILED): return self._to_status(task) else: logger.exception('Export to Google Drive failed. Task: ' + str(task)) return {'state': 'FAILED', 'description': 'Export to Google Drive failed: ' + task['error_message']}
def gee_running_tasks(): tl = Task.list() tl_running = filter(lambda x: x.state == Task.State.RUNNING and x.task_type == 'INGEST', tl) tl_running = map(lambda x: dict( id=x['id'], asset_id=x['description'].split(':')[1].strip()), tl_running) # pprint.pprint(list(tl_running)) return tl_running
import ee, os, time, urllib from ee.batch import Task, Export from typing import List, Union, Tuple, Dict, Optional ee.Initialize() cancel_tasks = True print( "Current tasks:") for task in Task.list(): print( f" TASK {task.id}: {task.status()}") if cancel_tasks: for task in Task.list(): if task.active(): print( f"Canceling Task <{task.id}>") task.cancel()
def find_task(task_id): return next(task for task in Task.list() if task.id == task_id)