code: def experience_run(task_id, exp_id, item_id):
      item = Item.objects.get(uuid=item_id)
      task = Task.objects.get(uuid=task_id)
      experience = Experience.objects.get(uuid=exp_id)
      if task.author:
          author = task.author.username
      else:
          author = ""
  
      try:
          logger.info(f"Run {str(experience)} on {str(item)}")
          if not (item.source_url or item.source_file):
              logger.info(
                  f"Item does not have any source_file nor source_url. \
                              Saving it again to retrieve data. \
                              Please re-run task {str(task.uuid)} after finish"
              )
              item.save()
          else:
              r.publish(
                  "timeside-experience-start",
                  str(author)
                  + ":"
                  + str(task.uuid)
                  + ":"
                  + str(experience.uuid)
                  + ":"
                  + str(item.uuid),
              )
              item.run(experience, task=task, item=item)
              gc.collect()
              r.publish(
                  "timeside-experience-done",
                  str(author)
                  + ":"
                  + str(task.uuid)
                  + ":"
                  + str(experience.uuid)
                  + ":"
                  + str(item.uuid),
              )
      except Exception as e:
          r.publish(
              "timeside-experience-fail",
              str(author)
              + ":"
              + str(task.uuid)
              + ":"
              + str(experience.uuid)
              + ":"
              + str(item.uuid),
          )
          raise e
  
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 2 for calling a global function with example usage: experience_run(task_id, exp_id, item_id) without return types