code: def async_chain(chain, group=None, cached=Conf.CACHED, sync=Conf.SYNC, broker=None):
      
      if not group:
          group = uuid()[1]
      args = ()
      kwargs = {}
      task = chain.pop(0)
      if type(task) is not tuple:
          task = (task,)
      if len(task) > 1:
          args = task[1]
      if len(task) > 2:
          kwargs = task[2]
      kwargs['chain'] = chain
      kwargs['group'] = group
      kwargs['cached'] = cached
      kwargs['sync'] = sync
      kwargs['broker'] = broker or get_broker()
      async_task(task[0], *args, **kwargs)
      return group
docs: enqueues a chain of tasks
      the chain must be in the format [(func,(args),{kwargs}),(func,(args),{kwargs})]