How to get the estimated remaining time of an already started Celery task?

I am using django with Celery and redis. I would like that when a user initiates a Celery task my app estimates the amount of time left until the task is completed(so that I can, for example, represent this data to the frontend as a progress bar).

For example, given this polling function:

views.py:

@csrf_protect
def initiate_task(request):
    task = new_celery_task.delay(parmeter_1, parametr_2)

@csrf_protect
def poll_task_status(request, task_id): #task_id provided by frontend
    
    import base64
    task_result = AsyncResult(task_id)
    
    if task_result.ready():
        try:
            ...
                    
                    response_data = {
                        'status': 'completed',
                        }
        
        except Task.DoesNotExist:
            return JsonResponse({'status': 'error', 'message': 'There has been an error'}, status=404)
    
    elif task_result.state == 'REVOKED':
        return JsonResponse({'status': 'terminated', 'message': 'Task was terminated'})
    
    else:
        #add code to calculate estimated remaining time here
        remaining_time_est = estimate_remaining_time() #estimate task by id
        return JsonResponse({'status': 'pending'
                             #add code to return estimated remaining time here
                             'est_remaining_time':remaining_time_est
                             })

and task:

task.py:

app = Celery('myapp')#
@app.task 
def new_celery_task(arg_1, arg_2):
    #complete task

How would I estimate the remaining time left on an initiated task?

Вернуться на верх