code: def task_monitor(task_id, results_id):
      results = [AsyncResult(id) for id in results_id]
      task = Task.objects.get(uuid=task_id)
      logger.info(f"Wait for results of {str(task)} to be ready")
      while not all([res.ready() for res in results]):
          time.sleep(1)
      logger.info(f"{str(task)} is done")
      task.status_setter(_DONE)
  
file_path: TimeSide/timeside/server/tasks.py
imports: from __future__ import absolute_import
  import time
  import gc
  from celery import shared_task
  from celery.result import AsyncResult
  from celery.result import GroupResult
  from .models import Item, Selection, Preset, Experience, Task
  from .models import _DONE
  from celery.task import chord
  from celery.utils.log import get_task_logger
  from django.conf import settings
  import redis
label_desc: Use image node_id 3 for calling a global function with example usage: task_monitor(task_id, results_id) without return types